Nghiên cứu, thiết kế hệ thống thu thập thông tin các thông số môi trường nước ứng dụng trong nuôi thủy sản

79 1 0
Nghiên cứu, thiết kế hệ thống thu thập thông tin các thông số môi trường nước ứng dụng trong nuôi thủy sản

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP ————————— BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN Nghiên cứu, thiết kế hệ thống thu thập thông tin thông số môi trường nước ứng dụng nuôi thủy sản Mã số: SV2020-66 Chủ nhiệm đề tài: Nguyễn Thị Thanh Thủy Giảng viên hướng dẫn: PGS.TS Đào Huy Du Thái Nguyên, 12/2021 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP ————————— BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN Nghiên cứu, thiết kế hệ thống thu thập thông tin thông số môi trường nước ứng dụng nuôi thủy sản Mã số: SV2020-66 Giảng viên hướng dẫn (ký, họ tên) Chủ nhiệm đề tài (ký, họ tên) Xác nhận tổ chức chủ trì KT HIỆU TRƯỞNG PHÓ HIỆU TRƯỞNG PGS.TS Vũ Ngọc Pi Thái Nguyên, 12/2021 CHỦ NHIỆM ĐỀ TÀI Họ tên : Nguyễn Thị Thanh Thủy Lp: K54ĐVT.01 MSSV: K185520207067 SĐT: 0965382871 Email: K185520207067@tnut.edu.vn CỘNG TÁC VIÊN Nguyễn Thị Phương Thảo Lp: K54ĐVT.01 MSSV: K185520207066 SĐT: 0924749169 Email: K185520207066@tnut.edu.vn Ma Phúc Vỹ Lp: K54ĐVT.01 MSSV: K185520207055 SĐT: 0326014789 Email: maphucvy012@gmail.com GIÁO VIÊN HƯỚNG DẪN: Họ tên: Đào Huy Du Điện thoại di động: 0912347222 E-mail: daohuydu@tnut.edu.vn TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP Đơn vị: KHOA ĐIỆN TỬ THÔNG TIN KẾT QUẢ NGHIÊN CỨU Thông tin chung: - Tên đề tài: Nghiên cứu, thiết kế hệ thống thu thập thông tin thông số môi trường nước ứng dụng nuôi thủy sản - Chủ nhiệm đề tài: Nguyễn Thị Thanh Thủy - Giáo viên hưng dẫn: PGS.TS Đào Huy Du - Cơ quan chủ trì: Khoa điện tử - Thời gian thực hiện: 12 tháng Từ tháng 12 năm 2020 đến tháng 12 năm 2021 Tính cấp thiết đề tài Trong q trình ni tơm thẻ chân trắng xử lý nước ni tơm công việc quan trọng Để nuôi tôm thành công, cần đảm bảo hàng loạt tiêu chất lượng nưc như: nồng độ oxy hòa tan, nhiệt độ, độ pH, NH3,NO2, H2S, độ kiềm, độ mặn, nồng độ khoáng chất, nồng độ Nitrat, nồng độ phốt pho, mật độ vi khuẩn, mật độ tảo, … phải nằm ngưỡng cho phép Chỉ cần tiêu vượt q ngưỡng cho phép tơm bị ảnh hưởng, chậm ln, giảm sức đề kháng, nhiễm bệnh chết Trong số tiêu chất lượng nưc, có tiêu biến đổi nhanh (thay đổi liên tục ngày) như: nồng độ oxy hòa tan, nhiệt độ, độ pH cần phải theo dõi, giám sát suốt ngày đêm Các tiêu liên quan đến lượng khí độc NH3, NO2, H2S ảnh hưởng ln sức khỏe tôm nên cần phải giám sát liên tục Vì vấn đề cấp thiết đặt cần phải có hệ thống thu thập thơng số nguồn nưc nhằm tự động kiểm tra, giám sát nhiều số chất lượng nguồn nưc liên tục để đưa cảnh báo, dẫn biện pháp kiểm soát chất lượng nguồn nưc nhằm xử lý kịp thời xác vấn đề phát sinh chất lượng nguồn nưc để trì chất lượng nguồn nưc ln đảm bảo u cầu, từ đem lại thành cơng cho q trình ni tơm thẻ chân trắng Do nhóm nghiên cứu đề xuất đề tài: “Nghiên cứu, thiết kế hệ thống thu thập thông tin thông số môi trường nước ứng dụng nuôi thủy sản” Mục tiêu: - Nghiên cứu công nghệ mi: Phần mềm kiểm tra thông số môi trường nuôi tôm - Nghiên cứu chuẩn thông số môi trường nuôi tôm Kết nghiên cứu: Sản phẩm: - Sản phẩm đào tạo: Báo cáo khoa học đề tài - Sản phẩm khoa học: Báo cáo khoa học đề tài - Sản phẩm ứng dụng: Tài liệu nghiên cứu đầy đủ nội dung Hiệu quả: Hệ thống thu thập thông số nguồn nưc nhằm tự động kiểm tra, giám sát nhiều số chất lượng nguồn nưc liên tục để đưa cảnh báo, dẫn biện pháp kiểm soát chất lượng nguồn nưc nhằm xử lý kịp thời xác vấn đề phát sinh chất lượng nguồn nưc để trì chất lượng nguồn nưc ln đảm bảo u cầu, từ đem lại thành cơng cho q trình ni tơm thẻ chân trắng Thái Ngun, Ngày 20 tháng 12 năm 2021 Cơ quan chủ trì KT.HIỆU TRƯỞNG PHÓ HIỆU TRƯỞNG PGS.TS Vũ Ngọc Pi Giáo viên hướng dẫn PGS.TS Đào Huy Du Chủ nhiệm đề tài Nguyễn Thị Thanh Thủy LỜI CẢM ƠN Trong thời gian học làm đề tài nghiên cứu khoa học sinh viên, em nhận truyền đạt kiến thức, phương pháp tư duy, phương pháp luận giảng viên trường Sự quan tâm ln nhà trường, thầy cô giáo trường Đại học Kỹ thuật Công nghiệp- Đại học Thái Nguyên bạn lp Em xin chân thành cảm ơn Ban giám hiệu, Khoa Điện tử, thầy cô giáo tham gia giảng dạy tận tình hưng dẫn, tạo điều kiện để em hoàn thành đề tài nghiên cứu khoa học lần Em xin bày tỏ lời cảm ơn chân thành đến thầy PGS.TS Đào Huy Du tập thể cán giảng viên môn Điện Tử Viễn Thông cho dẫn quý báu để em hoàn thành đề tài nghiên cứu khoa học Mặc dù cố gắng, xong kiến thức kinh nghiệm cịn hạn chế nên chắn báo cáo khơng tránh khỏi thiếu sót, em mong muốn nhận dẫn từ thầy, cô giáo bạn học để đề tài hoàn thiện có ý nghĩa thực tiễn Xin chân thành cảm ơn! Người nghiên cứu Nguyễn Thị Thanh Thủy MỤC LỤC MỤC LỤC CHƯƠNG TỔNG QUAN CÔNG NGHỆ T Ự Đ ỘNG HĨA Đ Ể KIỂM SỐT AO NI TƠM TH ẺCHÂN TRẮẮNG .4 1.1 Nghiên c ứ u chu trình ni tơm th ẻchân trắắng 1.1.1 Gi i thi uệchung vềề tôm th ẻchân trắắng 1.1.2 Hi nệtr ng nuôi tôm th chân ẻ trắắng thêắ giới 1.1.3 Hi n ệ tr ng nuôi tôm th ẻchân trắắng Việt Nam 1.2 Xác đ nhị nhu câầu cơng ngh tệ đự ng ộ ki mểsốt châắt l ượ ng n ướ c ao nuôi tôm th ẻchân trắắng CH ƯƠ NG 2: NH Ả H ƯỞ NG C AỦCÁC CH TIÊU Ỉ CHÂẮT L ƯỢ NG N ƯỚ C ĐÊẮN NẮNG SUÂẮT, CHÂẮT L ƯỢ NG TÔM TH ẺCHÂN TRẮẮNG 10 2.1 nh hẢ ngưở c a nơầủng đ oxyộhịa tan (DO) đêắn nắng sắt, châắt l ượ ng tôm th ẻchân trắắng 10 2.2 nh hẢ ngưở c a pHủ đêắn nắng suâắt, châắt l ượ ng tôm th ẻchân trắắng .12 2.3 nh hẢ ngưở c a nhi ủ t đ ệđêắn ộ nắng suâắt, châắt l ượ ng tôm th ẻchân trắắng 13 2.4 2.5 2.6 Ảnh hưởng độ ơxy hóa khử, độ mặn đ êắn nắng sắt, châắt l ượ ng tôm th ẻchân trắắng 14 nh Ả h ưở ng c aủcác yêắu tôắ khác đêắn nắng suâắt, châắt l ượ ng tôm th ẻchân trắắng 15 Qu n ả lý môi tr ườ ng ao nuôi cho tôm th ẻchân trắắng 22 CH ƯƠ NG 3: THÀNH PHÂẦN CHÍNH C AỦH THÔẮNG Ệ T ỰĐ Ộ NG KI Ể M SOÁT CHÂẮT L ƯỢ NG N ƯỚ C TRONG AO NUÔI TÔM TH ẺCHÂN TRẮẮNG 24 3.1 S đơầ khơắi ngun lí ho tạ đ ộ ng c aủ h ệthôắng 24 3.2 Nghiên c u ứ c m ảbiêắn đo thông sôắ châắt lượng nước 25 CH ƯƠ NG 4: H THÔẮNG Ệ T ỰĐ Ộ NG KI Ể M SOÁT CHÂẮT L ƯỢNG N ƯỚC NUÔI TÔM TH ẺCHÂN TRẮẮNG .28 4.1 Phâần mêầm thu thậ p thông tn theo thời gian thực 28 4.2 Cơ sở liệu: 28 4.3 Website giám sát điêầu khiể n thông tn qua internet 31 CH ƯƠ NG 5: KÊẮT LU Ậ N VÀ KIÊẮN NGHỊ 36 5.1 KẾẾT LUẬN 36 5.2 KIẾẾN NGHỊ 37 TÀI LIỆU THAM KHẢO .38 CHÂU TÀI TẢO, KHOA THỦY SẢN, ĐẠI H ỌC CÂẦN THƠ [VÀI NÉT VỀẦ TÌNH HÌNH NUÔI TÔM CHÂN TRẮẮNG TRỀN THỀẮ GIỚI VÀ VI ỆT NAM] HTTPS://WWW.TONGCUCTHUYSAN.GOV.VN/ 38 HÀ VẮN THÁI, PHÍ THỊ HẮẦNG, PHAN THỊ NGỌC DI ỆP, TRÂẦN TRUNG DŨNG, TỔNG QUAN CÁC MƠ HÌNH CÓ THỂ ÁP DỤNG ĐỂ X Ử LÝ NƯỚC THẢI CHO NUÔI TÔM TH ẺCHÂN TRẮẮNG ( LITOPENAEUS VANNAMEI) VÙNG BẮẮC TRUNG B Ộ ,T Ạ P CHÍ KHOA H Ọ C VÀ CÔNG NGH ỆTH Ủ YL Ợ I SÔẮ 38-2017 .38 16 LIAO I.C., CHIEN YH (2011) THE PACIFIC WHITE SHRIMP, LITOPENAEUS VANNAMEI, IN ASIA: THE WORLD’S MOST WIDELY CULTURED ALIEN CRUSTACEAN IN: GALIL B., CLARK P., CARLTON J (EDS) IN THE WRONG PLACE - ALIEN MARINE CRUSTACEANS: DISTRIBUTION, BIOLOGY AND IMPACTS INVADING NATURE - SPRINGER SERIES IN INVASION ECOLOGY, VOL SPRINGER, DORDRECHT 39 PHỤ LỤC .41 Chương TỔNG QUAN CƠNG NGHỆ TỰ ĐỘNG HĨA ĐỂ KIỂM SỐT AO NI TƠM THẺ CHÂN TRẮNG 1.1 Nghiên cứu chu trình ni tơm thẻ chân trắng 1.1.1 Giới thiệu chung tôm thẻ chân trắng Tôm thẻ chân trắng (có tên khoa học Litopenaeus vannamei) lồi giáp xác thuộc bờ biển phía đơng Thái Bình Dương Trung Nam Mỹ từ Tumbes, Peru đến Mexico Loài thường sinh sống khu vực nơi nhiệt độ nưc quanh năm thường 25°C Chúng thích sống vùng bùn đáy Tơm thẻ chân trắng sống vùng biển nhiệt đi, trưởng thành loài sống đẻ trứng đại dương Tuy nhiên ấu trùng non thường tìm thấy vùng nưc ven bờ cửa sông ven biển, đầm phá khu vực rừng ngập mặn Tôm ln nhanh tôm đực Con trưởng thành đạt 30-45 g đẻ 100.000-250.000 trứng Chu trình vịng đời tơm thẻ chân trắng phức tạp Con trưởng thành đẻ trứng vùng biển xa bờ Quá trình thụ tinh xảy ngồi mơi trường Q trình ấp trứng xảy sau đẻ trứng thụ tinh Giai đoạn ấu trùng vi thức ăn chủ yếu động vật phù du [Hailu Dugassa and De Gyrse Gaetan (2018), Biology of White Leg Shrimp, Penaeus vannamei: Review, World J Fish & Marine Sci., 10 (2): 05-17, 2018] Tôm thành thục sau 6-7 tháng, tôm đực thành thục 20 g/con, tôm 28 g/con Sức sinh sản 100-140 nghìn trứng vi tơm cỡ 30-35g 150-200 nghìn trứng vi tơm cỡ 40-45g Tơm chân trắng có tốc độ tăng trưởng nhanh, đạt 3g/tuần Trong điều kiện nuôi thâm canh vi mật độ 150 con/m2, kích cỡ thương phẩm tơm chân trắng 20 g/con, sau đó, giảm tốc độ tăng trưởng 1g/tuần Tại châu Á, tôm nuôi thương phẩm ao đất Thái Lan Inđônêxia nuôi thâm canh vi mật độ 60-150 con/m2 đạt tốc độ tăng trưởng 1-1,5g/tuần, tỷ lệ sống 80-90% (trong tốc độ tăng trưởng tôm sú 1-1,2g/tuần tỷ lệ sống khoảng 4554%) Philippin nuôi thâm canh vi mật độ cao 100-200 con/m2, hệ số thức ăn 1,3-1,5, tỷ lệ sống đạt 65-85%, suất đạt 7-12 tấn/ha/vụ sau 90-120 ngày nuôi Tôm chân trắng chịu độ mặn khoảng rộng, từ 0,5-45%o (đặc biệt thích nghi vi độ mặn 7-34%o) tăng trưởng tốt độ mặn thấp (10-15%o) Nhiệt độ thích hợp 23-30oC, tăng trưởng tốt cho giai đoạn tôm nhỏ (1g) 30oC, giai đoạn tôm ln (12-18g) 27oC khoảng chịu đựng chấp nhận 15-33 oC So vi lồi tơm khác, tơm chân trắng có nhu cầu đạm thấp nhiều (chỉ 20-35%) có khả sử dụng nguồn thức ăn tự nhiên (trong tôm sú tơm thẻ Trung Quốc, tơm thẻ Penaeus stylirostris có nhu cầu đạm 36-42%) Hiệu sử dụng thức ăn tôm chân trắng tốt tốm sú (tôm chân trắng 1,2; tôm sú 1,6) Tuỳ theo giai đoạn phát triển, nhu cầu đạm giảm dần theo kích cỡ tăng lên tơm 1.1.2 Hiện trạng nuôi tôm thẻ chân trắng giới Tôm thẻ chân trắng loài giáp xác thuộc bờ biển phía đơng Thái Bình Dương Trung Nam Mỹ từ Tumbes, Peru đến Mexico Nó đưa vào nuôi thử nghiệm châu Á từ năm 1978 đến năm 1979 Đến năm 1992, chúng nuôi phổ biến gii, chủ yếu tập trung nưc Nam Mỹ (Wedner &Rosenberry.,1992) Khi nhiều nưc Châu Á tìm cách hạn chế phát triển tôm chân trắng sợ lây bệnh cho tôm sú Tôm thẻ chân trắng sản xuất thương mại từ năm 1996 Đài Loan Trung Quốc từ lan nhanh sang quốc gia khác châu Á khác bao gồm Thái Lan, Indonesia, Việt Nam, Philippines, Malaysia Ấn Độ (Rosenberry, 2004; Briggs et al., 2004) Châu Á (đặc biệt Trung Quốc, Thái Lan Indonesia) Cho đến năm 2003 nưc châu Á bắt đầu nuôi đối tượng sản lượng tôm thẻ chân trắng gii đạt khoảng triệu tấn, từ sản lượng tơm liên tục tăng nhanh qua năm, đến năm 2010 sản lượng tôm đạt khoảng 2,7 triệu (FAO, 2011) Năm 2008, 67% sản lượng tôm nuôi gii tôm thẻ chân trắng vi sản lượng 2.259.183 Sản lượng tăng nhanh sản lượng châu Á tăng gấp 18 lần, từ 93.648 năm 2001 lên 1.823.531 năm 2008, chiếm 82% tổng sản 10 ui.min.js"> 65 3.2 Code JavaScript xử lý AJAX trang: var zindex=1,minmaxid="";$(document).ready(function(){function a(a){return $ (a).hasClass("fan")}function n(a){return $(a).hasClass("pump")}function e(a){return $ (a).hasClass("suckhi")}function t(n){a(n)&&$ (n).removeClass("fanoff").addClass("fanon")}function o(n){a(n)&&$ (n).removeClass("fanon").addClass("fanoff")}function l(a,n){n?t(a):o(a)}function i(a) {n(a)&&$(a).removeClass("pumpoff").addClass("pumpon")}function s(a){n(a)&&$ (a).removeClass("pumpon").addClass("pumpoff")}function r(a,n){n?i(a):s(a)}function h(a){e(a)&&$(a).removeClass("suckhioff").addClass("suckhion")}function u(a) {e(a)&&$(a).removeClass("suckhion").addClass("suckhioff")}function c(n){a(n)&&(! function(a){return $(a).hasClass("fanon")}(n)? g(n,"on")&&t(n):g(n,"off")&&o(n))}function d(a){n(a)&&(!function(a){return $ (a).hasClass("pumpon")}(a)?g(a,"on")&&i(a):g(a,"off")&&s(a))}function m(a) {e(a)&&(!function(a){return $(a).hasClass("suckhion")}(a)? g(a,"on")&&h(a):g(a,"off")&&u(a))}function g(a,n){return $ ("#banner").hasClass("byhand")?($("#table_nguong").hide(),$("#table_alert").show(), $("#save").hide(),$("#DialogTitle").html("Thơng báo"),$("#table_alert").html("KHƠNG CHO PHÉP ĐIỀU KHIỂN TỪ XACHỈ ĐIỀU KHIỂN TẠI TRẠM"),$ ("#myDialog").modal("show"),0):($.post("api.aspx?action=control_machine", {id:a,cmd:n},function(a){var n=JSON.parse(a);n.msg&&($("#table_nguong").hide(),$ ("#table_alert").show(),$("#save").hide(),$("#DialogTitle").html("Thông báo"),$ ("#table_alert").html(""+n.msg+""),$("#myDialog").modal("show"))}),1)}function p() {$.get("api.aspx?action=get_status",function(a){!function(a) {l("#fan11",a.a1_quat1),l("#fan12",a.a1_quat2),l("#fan21",a.a2_quat1),l("#fan22",a.a2 _quat2),r("#pump1",a.a1_bom),r("#pump2",a.a2_bom),n="#suckhi",e=a.suckhi,e? h(n):u(n),f("#oxy1",a.a1_oxy,rules.oxy),f("#oxy2",a.a2_oxy,rules.oxy),f("#ph1",a.a1_ PH,rules.ph),f("#ph2",a.a2_PH,rules.ph),f("#nhietdo1",a.a1_nhietdo,rules.nhietdo),f(" #nhietdo2",a.a2_nhietdo,rules.nhietdo),f("#oxyhk1",a.a1_OXK,rules.oxyhk),f("#oxyh k2",a.a2_OXK,rules.oxyhk),f("#man1",a.a1_doman,rules.man),f("#man2",a.a2_doman ,rules.man),a.auto?$("#banner").removeClass("byhand"):$ ("#banner").addClass("byhand");var n,e}(JSON.parse(a))})}function f(a,n,e){$ (a).html(n);for(var t=0;t.so{left:50px}.nhan{position:absolute;width:160px;height:3 0px;text-align:right;backgroundcolor:#eee}.inline{left:165px;position:absolute;width:88px;height:30px;textalign:right;background-color:#fff;paddingright:2px}.dv{left:253px;position:absolute;width:50px;height:30px;paddingleft:2px;backgroundcolor:#eee}.so:after,.so:before{color:#000}#ao2>.so{left:562px}.ten:before{position:a bsolute;bottom:5px;height:25px;font-size:25px;fontweight:700;color:red}#ao1>.ten:before{left:160px;content:"Ao nuôi tôm số 1"}#ao2>.ten:before{left:670px;content:"Ao nuôi tôm số 2"}.oxy{top:300px}.dv,.inline,.nhan{display:inline}.dv,.nhan{color:#000}.oxy nhan:before{content:"Nồng độ Oxy: "}.oxy dv:before{content:" mg/l"}.ph{top:350px}.ph nhan:before{content:"Độ pH: "}.ph dv:before{content:" pH"}.nhietdo{top:400px}.nhietdo nhan:before{content:"Nhiệt độ: "}.nhietdo dv:before{content:" ℃"}.oxyhk{top:450px}.oxyhk nhan:before{content:"Độ Oxy hóa khử: "}.oxyhk dv:before{content:" mV"}.man{top:500px}.man nhan:before{content:"Độ mặn: "}.man dv:before{content:" mg/l"}#DialogBody table td{padding:5px}.footer{text-align:center}.alertclick{position:absolute;width:25px;height:30px;left:304px}.alert{width:25px;height:3 0px;background-repeat:no-repeat;background-size:30px}.alert-ok{backgroundimage:url(images/ok.png)}.alert-low{backgroundimage:url(images/alert.png);animation:blink-animation 1s steps(5,start) infinite;webkit-animation:blink-animation 1s steps(5,start) infinite}.alert-high{backgroundimage:url(images/alert-red.png);animation:blink-animation 1s steps(5,start) infinite;webkit-animation:blink-animation 1s steps(5,start) infinite}.blinkanimation{animation:blink-animation 1s steps(5,start) infinite;-webkitanimation:blink-animation 1s steps(5,start) infinite;color:red;font-weight:700}.infook{font-weight:700;color:#00f}@keyframes blinkanimation{to{visibility:hidden}}@-webkit-keyframes blink68 animation{to{visibility:hidden}}.byhand{background-image:linear-gradient(to top,#fff,rgba(238,81,81,.34),#fff)} 3.4 Code C# tạo API xử lý phía server giao tiếp JSON với giao diện qua AJAX: using S7.Net; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebTom { public partial class api : System.Web.UI.Page { string STR_CONNECT_DB = System.Configuration.ConfigurationManager.ConnectionStrings["Str_connect_DB"] ConnectionString; protected void Page_Load(object sender, EventArgs e) { string action = Request["action"]; switch (action) { case "get_status": get_status(); break; case "get_minmax": get_minmax(); break; case "set_minmax": set_minmax(); break; case "control_machine": control_machine(); break; } } void get_addr_min_max(string id, out string admin, out string admax) { string amin = "", amax = ""; switch (id) 69 { case "oxy1": amin = "a1_oxy_low"; amax = "a1_oxy_high"; break; case "ph1": amin = "a1_PH_low"; amax = "a1_PH_high"; break; case "nhietdo1": amin = "a1_nhietdo_low"; amax = "a1_nhietdo_high"; break; case "oxyhk1": amin = "a1_OXK_low"; amax = "a1_OXK_high"; break; case "man1": amin = "a1_doman_low"; amax = "a1_doman_high"; break; case "oxy2": amin = "a2_oxy_low"; amax = "a2_oxy_high"; break; case "ph2": amin = "a2_PH_low"; amax = "a2_PH_high"; break; case "nhietdo2": amin = "a2_nhietdo_low"; amax = "a2_nhietdo_high"; break; case "oxyhk2": amin = "a2_OXK_low"; amax = "a2_OXK_high"; break; case "man2": amin = "a2_doman_low"; amax = "a2_doman_high"; break; } if (amin != "" && amax != "") 70 { admin = load_addr(amin); admax = load_addr(amax); } else { admin = admax = ""; } } public static unsafe int SingleToInt32Bits(float value) { return *(int*)(&value); } void set_minmax() { try { object ss = Session["OK"]; string ok; if (ss == null) ok = null; else ok = ss.ToString(); if (ok == null || ok != "ok") { Response.Write("{\"ok\":false,\"msg\":\"For admin only Please login first\"}"); return; } string id = Request.Form["id"]; string admin = "", admax = ""; get_addr_min_max(id, out admin, out admax); float = float.Parse(Request["min"]); float max = float.Parse(Request["max"]); int flag = 1; if (admin != "" && admax != "") { flag = 3; using (Plc plc = new Plc(CpuType.S71200, "192.168.1.105", 0, 0)) { ErrorCode openResult = plc.Open(); if (openResult == ErrorCode.NoError) { 71 int imin = SingleToInt32Bits(min); ErrorCode er1 = plc.Write(admin, imin); int imax = SingleToInt32Bits(max); ErrorCode er2 = plc.Write(admax, imax); Response.Write("{\"ok\":true, \"msg\":\"\"}"); flag = 4; plc.Close(); string uid = Session["uid"].ToString(); LogMsg(string.Format("SetMinMax by {0}”,uid)); } else { flag = 5; } } } if (flag != 4) { Response.Write("{\"ok\":false,\"msg\":\"somthing went wrong.\"}"); } } catch (Exception ex) { Response.Write("{\"ok\":false,\"msg\":\"Error: " + ex.Message + "\"}"); } } void get_minmax() { string id = Request.Form["id"]; int flag = 0; string admin = "", admax = ""; get_addr_min_max(id, out admin, out admax); double = 0, max = 0; flag = 1; if (admin != "" && admax != "") { flag = 3; using (Plc plc = new Plc(CpuType.S71200, "192.168.1.105", 0, 0)) { 72 ErrorCode openResult = plc.Open(); if (openResult == ErrorCode.NoError) { = GetDouble(admin, plc); max = GetDouble(admax, plc); Response.Write("{\"ok\":true,\"min\":" + + ",\"max\":" + max + "}"); flag = 4; plc.Close(); } else { flag = 5; } } } if (flag != 4) { Response.Write("{\"ok\":false,\"msg\":\"somthing went wrong " + debug + "\"}"); } } public static unsafe float Int32BitsToSingle(uint value) { return *(float*)(&value); } private double GetDouble(string addr, Plc plc) { try { uint i32 = uint.Parse(plc.Read(addr).ToString()); float f = Int32BitsToSingle(i32); return Math.Round(f, 4); } catch (Exception ex) { LogMsg(string.Format("API GetDouble addr={0} error={1}", addr, ex.Message)); return 0; } } string load_addr(string id) { 73 try { using (SqlConnection cn = new SqlConnection(STR_CONNECT_DB)) { cn.Open(); string sql = "SELECT Address FROM Config where id=@id"; using (SqlCommand cm = new SqlCommand(sql, cn)) { cm.Parameters.Add("@id", SqlDbType.NVarChar, 50).Value = id; string addr = (string)cm.ExecuteScalar(); return addr; } } } catch { return ""; } } void control_machine() { try { object ss = Session["OK"]; string ok; if (ss == null) ok = null; else ok = ss.ToString(); if (ok == null || ok != "ok") { Response.Write("{\"msg\":\"For admin only Please login first\"}"); return; } string id = Request.Form["id"]; if (id == null || id == "") { Response.Write("{\"msg\":\"id error\"}"); return; } string cmd = Request.Form["cmd"]; if (!(cmd == "on" || cmd == "off")) 74 { Response.Write("{\"msg\":\"cmd error\"}"); return; } string addr = ""; int value = 0; try { if (id == "#fan11" || id == "#fan12" || id == "#fan21" || id == "#fan22" || id == "#pump1" || id == "#pump2" || id == "#suckhi") { addr = load_addr(id); value = (cmd == "on" ? : 0); } } catch { addr = ""; value = 0; } if (addr != "") { using (Plc plc = new Plc(CpuType.S71200, "192.168.1.105", 0, 0)) { if (plc.Open() == ErrorCode.NoError) { ErrorCode er = plc.Write(addr, value); plc.Close(); Response.Write("{\"ok\":true, \"msg\":\"\"}"); string uid = Session["uid"].ToString(); LogMsg(string.Format("TurnMachine by {0}", uid)); } else { Response.Write("{\"msg\":\"can not connect to plc\"}"); } } } else 75 { string debug = string.Format("debug: id={0} cmd={1} addr={2} value={3}", id, cmd, addr, value); Response.Write("{\"msg\":\"something went wrong " + debug + "\"}"); } } catch (Exception ex) { Response.Write("{\"msg\":\"control machine error: " + ex.Message + "\"}"); } } private void LogFile(string fn, string msg) { string msg_log = string.Format("{0} {1}\r\n", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), msg); System.IO.File.AppendAllText(fn, msg_log); } private void LogMsg(string msg) { try { using (SqlConnection cn = new SqlConnection(STR_CONNECT_DB)) { cn.Open(); string sql = "SP_LOG"; using (SqlCommand cm = new SqlCommand(sql, cn)) { cm.CommandType = CommandType.StoredProcedure; cm.Parameters.Add("@msg", SqlDbType.NText).Value = msg; int n = cm.ExecuteNonQuery(); if (n != 1) { LogFile("d:\\Log.txt", "API LogMsg: Can not insert msg=" + msg); } } } } catch (Exception ex) { LogFile("d:\\Log.txt", "API LogMsg error: " + ex.Message); 76 } } double getFloat(DataRow r, string id) { double v = 0; try { string s = r[id].ToString(); v = double.Parse(s); v = Math.Round(v, 4); return v; } catch (Exception ex) { LogMsg("API getFloat id=" + id + " error: " + ex.Message); return 0; } } bool getBool(DataRow r, string id) { bool v = false; try { string s = r[id].ToString().ToLower(); if (s == "0" || s == "false") v = false; else v = true; return v; } catch (Exception ex) { LogMsg("API getBool id=" + id + " error: " + ex.Message); return false; } } void get_status() { PLCData data = new PLCData(); try { using (SqlConnection cn = new SqlConnection(STR_CONNECT_DB)) 77 { cn.Open(); string sql = "SP_GetData"; using (SqlCommand cm = new SqlCommand(sql, cn)) { cm.CommandType = CommandType.StoredProcedure; using (SqlDataReader dr = cm.ExecuteReader()) { using (DataTable dt = new DataTable()) { dt.Load(dr); foreach (DataRow r in dt.Rows) { string id = r["id"].ToString(); bool b = getBool(r, "value"); double f = getFloat(r, "value"); if (id == "a1_bom") data.a1_bom = b; else if (id == "a1_quat1") data.a1_quat1 = b; else if (id == "a1_quat2") data.a1_quat2 = b; else if (id == "a2_bom") data.a2_bom = b; else if (id == "a2_quat1") data.a2_quat1 = b; else if (id == "a2_quat2") data.a2_quat2 = b; else if (id == "auto") data.auto = b; else if (id == "cb_man_a1") data.cb_man_a1 = b; else if (id == "cb_man_a2") data.cb_man_a2 = b; else if (id == "cb_nhietdo_a1") data.cb_nhietdo_a1 = b; else if (id == "cb_nhietdo_a2") data.cb_nhietdo_a2 = b; else if (id == "cb_oxihkhu_a1") data.cb_oxihkhu_a1 = b; else if (id == "cb_oxihkhu_a2") data.cb_oxihkhu_a2 = b; else if (id == "cb_oxy_a1") data.cb_oxy_a1 = b; else if (id == "cb_oxy_a2") data.cb_oxy_a2 = b; else if (id == "cb_ph_a1") data.cb_ph_a1 = b; else if (id == "cb_ph_a2") data.cb_ph_a2 = b; else if (id == "start") data.start = b; else if (id == "stop") data.stop = b; else if (id == "suckhi") data.suckhi = b; else if (id == "a1_doman") data.a1_doman = f; else if (id == "a1_doman_high") data.a1_doman_high = f; else if (id == "a1_doman_low") data.a1_doman_low = f; else if (id == "a1_nhietdo") data.a1_nhietdo = f; else if (id == "a1_nhietdo_high") data.a1_nhietdo_high = f; else if (id == "a1_nhietdo_low") data.a1_nhietdo_low = f; else if (id == "a1_OXK") data.a1_OXK = f; 78 else if (id == "a1_OXK_high") data.a1_OXK_high = f; else if (id == "a1_OXK_low") data.a1_OXK_low = f; else if (id == "a1_oxy") data.a1_oxy = f; else if (id == "a1_oxy_high") data.a1_oxy_high = f; else if (id == "a1_oxy_low") data.a1_oxy_low = f; else if (id == "a1_PH") data.a1_PH = f; else if (id == "a1_PH_high") data.a1_PH_high = f; else if (id == "a1_PH_low") data.a1_PH_low = f; else if (id == "a2_doman") data.a2_doman = f; else if (id == "a2_doman_high") data.a2_doman_high = f; else if (id == "a2_doman_low") data.a2_doman_low = f; else if (id == "a2_nhietdo") data.a2_nhietdo = f; else if (id == "a2_nhietdo_high") data.a2_nhietdo_high = f; else if (id == "a2_nhietdo_low") data.a2_nhietdo_low = f; else if (id == "a2_OXK") data.a2_OXK = f; else if (id == "a2_OXK_high") data.a2_OXK_high = f; else if (id == "a2_OXK_low") data.a2_OXK_low = f; else if (id == "a2_oxy") data.a2_oxy = f; else if (id == "a2_oxy_high") data.a2_oxy_high = f; else if (id == "a2_oxy_low") data.a2_oxy_low = f; else if (id == "a2_PH") data.a2_PH = f; else if (id == "a2_PH_high") data.a2_PH_high = f; else if (id == "a2_PH_low") data.a2_PH_low = f; } } } string json = Newtonsoft.Json.JsonConvert.SerializeObject(data); Response.Write(json); } } } catch (Exception ex) { string err = "API GET_STATUS error: " + ex.Message; LogMsg(err); Response.Write(err); } } } } 79

Ngày đăng: 18/07/2023, 18:04

Tài liệu cùng người dùng

Tài liệu liên quan