Nghiên cứu lập trình điều khiển cho robot vận chuyển hàng hóa

138 0 0
Nghiên cứu lập trình điều khiển cho robot vận chuyển hàng hóa

Đ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

TRƯỜNG ĐẠI HỌC LÂM NGHIỆP VIỆT NAM KHOA CƠ ĐIỆN VÀ CƠNG TRÌNH BỘ MƠN KỸ THUẬT ĐIỆN VÀ TỰ ĐỘNG HÓA KHÓA LUẬN TỐT NGHIỆP ĐỀ TÀI: NGHIÊN CỨU LẬP TRÌNH ĐIỀU KHIỂN CHO ROBOT VẬN CHUYỂN HÀNG HĨA Giáo viên hướng dẫn : ThS Lê Minh Đức Sinh viên thực : Nguyễn Minh Hoàng Mã sinh viên : 1851060307 Lớp : Công nghệ kỹ thuật điện tử Khóa học : 63 Hà Nội - 2022 LỜI NÓI ĐẦU Ngày nay, kinh tế nước ta đà phát triển mạnh mẽ, ngành công nghiệp ngày địi hỏi trình độ khoa học kỹ thuật cao Nhu cầu suất chất lượng ngày đòi hỏi ứng dụng rộng rãi phương tiện tự động hóa sản xuất Xu hướng tạo dây chuyền thiết bị tự động hóa có tinh linh hoạt cao hoàn thành Các thiết bị thay dần máy tự động, đáp ứng việc định thị trường ln địi hỏi thay đổi mặt hàng chủng loại, kích cỡ tính Vì ngày tăng nhanh nhu cầu ứng dụng Robot để tạo hệ thống sản xuất linh hoạt công nghiệp Xuất phát từ lí trên, em thực đề tài khố luận tốt nghiệp: “NGHIÊN CỨU LẬP TRÌNH ĐIỀU KHIỂN CHO ROBOT VẬN CHUYỂN HÀNG HĨA.” Khố luận tốt nghiệp em gồm chương: Chương 1: Tổng quan Robot sản xuất Chương 2: Cơ sở lí thuyết Chương 3: Xây dựng chương trình điều khiển Chương 4: Vận hành thử nghiệm Bằng cố gắng nỗ lực thân đặc biệt giúp đỡ tận tình thầy giáo ThS.Lê Minh Đức Giám Đốc Phạm Hồng Dương, công ty điện tử Anh Việt giúp em hồn thành khố luận thời hạn Do thời gian làm khóa luận có hạn trình độ cịn nhiều hạn chế nên khơng thể tránh khỏi thiếu sót Em mong nhận đóng góp ý kiến thầy bạn sinh viên để khóa luận hoàn thiện Em xin chân thành cảm ơn thầy giáo ThS.Lê Minh Đức, thầy cô giáo Bộ mơn Kỹ thuật điện Tự động hóa Trường Đại Học Lâm Nghiệp Việt Nam tạo điều kiện giúp đỡ em thời gian thực đề tài tốt nghiệp Hà nội, ngày tháng năm 2022 Sinh viên thực Nguyễn Minh Hoàng i NHẬN XÉT (Của giảng viên hướng dẫn) Họ tên sinh viên: ……………………………………………………… Mã sinh viên: ….…………………………………………………………………… Lớp: ……………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… Kết luận: Đồng ý/Không đồng ý cho sinh viên…………nộp báo cáo khóa luận tốt nghiệp Hà Nội, ngày…… tháng…… năm…… GIÁO VIÊN HƯỚNG DẪN (Chữ ký, Họ tên) ii NHẬN XÉT (Của giảng viên phản biện) Họ tên sinh viên: ……………………………………………………… Mã sinh viên: ….…………………………………………………………………… Lớp: ……………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… GIẢNG VIÊN PHẢN BIỆN (Chữ ký, họ tên) iii MỤC LỤC LỜI NÓI ĐẦU i NHẬN XÉT ii (Của giảng viên hướng dẫn) ii NHẬN XÉT iii (Của giảng viên phản biện) iii MỤC LỤC iv DANH MỤC CÁC HÌNH VẼ vi CHƯƠNG 1: TỔNG QUAN VỀ ROBOT 1.1 Giới thiệu chung Robot .1 1.2 Phân loại Robot .2 1.3 Ứng dụng Robot vận chuyển hàng hóa CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ĐIỀU KHIỂN PLC VÀ ROBOT .4 2.1 Thu phát sóng RF (Radio Frequency) .4 2.2 Cơ chế hoạt động dây truyền sản xuất sử dụng PLC 2.2.1 Bộ vi điều khiển, vi xử lý, xử lý tín hiệu số (DSP) mạng truyền thơng cơng nghiệp 2.2.2 Mơ hình hoạt động dây truyền sản xuất Robot 12 2.2.3 Cơ chế hoạt động PLC giao tiếp với Robot 13 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH ĐIỀU KHIỂN .14 3.1 Cơ sở lý thuyết lập trình 14 3.1.1 Ngơn ngữ lập trình .14 3.1.2 Giới thiệu phần mềm lập trình .15 3.3 Lưu đồ thuật toán 19 3.3.1 Cơ sở liệu 21 3.4 Viết chương trình điều khiển 21 3.5 Giao tiếp người máy HMI (Human Machine Interface) .28 3.6 Giao tiếp PLC với Robot qua sóng NFR24L01 33 3.6.1 Tổ chức gói tin truyền nhận .33 3.6.2 Định địa thiết bị đầu cuối đường ống liệu pipe0 đến pipe5 .34 3.6.3 Cơ chế giao tiếp kiểm soát lỗi .35 iv 3.6.4 Chương trình phục vụ giao tiếp lớp vật lý (drvier) – file nrf24l01.c, nrf24l01.h (Trình bày phụ lục 6) 36 3.6.5 Chương trình phục vụ giao tiếp lớp liên kết liệu (linker) – file rft_2g4hz.c, rft_2g4hz.h (Trình bày phụ lục 7) .36 CHƯƠNG 4: VẬN HÀNH THỬ NHIỆM MƠ HÌNH .37 4.1 Nạp chương trình .37 4.2 Gỡ lỗi 38 4.3 Chạy thử mơ hình 38 Hình 4.4 Mơ hình thực tế 38 KẾT LUẬN .39 PHỤ LỤC DANH MỤC TÀI LIỆU THAM KHẢO v DANH MỤC CÁC HÌNH VẼ Hình 1.1 Robot Shakey Hình 1.2 Robot Hexapod TU Munich Hình 2.1 Biểu thị sóng mang (sóng RF) .4 Hình 2.2 Điều chế biên độ AM Hình 2.3 Điều chế tần số FM Hình 2.4 Sóng tín hiệu từ Anten Hình 2.5 Cấu tạo chip vi điều khiển Hình 2.6 Cấu tạo vi xử lý Hình 2.7 Bộ xử lý tín hiệu số DSP Hình 2.8 Đặc điểm bật xử lý tín hiệu số DSP 10 Hình 2.9 Mơ hình phân cấp mạng truyền thơng cơng nghiệp .11 Hình 2.10 Sơ đồ mơ hình vận chuyển hàng hóa Robot 12 Hình 3.1 File dịch mã máy hợp ngữ MPLAB IDE 14 Hình 3.2 File lập trình lập trình ngơn ngữ C++ MPLAB IDE .15 Hình 3.3 Sa hình xưởng 17 Hình 3.4 Thuật tốn xếp hàng 19 Hình 3.5 Thuật tốn dỡ hàng .19 Hình 3.6 Thuật tốn CNC A .20 Hình 3.7 Thuật toán CNC B 20 Hình 3.8 Cài đặt Interrupt Module 22 Hình 3.9 Cài đặt Pin module .22 Hình 3.10 Cài đặt cho System Module .23 Hình 3.11 Cài đặt Pin Manager 23 Hình 3.12 Hiển thị PlcChayBT 30 Hình 3.13 Di chuyển trỏ đến khâu 30 Hình 3.14 Di chuyển trỏ đến lệnh chấn 31 Hình 3.15 Lệnh chấn máy CNC A thực .31 Hình 3.16 Chọn chế độ PLC chạy tự động 32 Hình 3.17 Thực chế độ Plc chạy tự động 33 Hình 3.18 Địa đường ống liệu 35 Hình 3.19 Ví dụ địa đường ống liệu MultiCeiver ™ 35 Hình 4.1 Sau dịch chương trình thành cơng 37 Hình 4.2 Cấu hình cho trình biên dịch Project 37 Hình 4.3 Làm lại đường truyền .37 Hình 4.4 Mơ hình thực tế 38 vi CHƯƠNG 1: TỔNG QUAN VỀ ROBOT 1.1 Giới thiệu chung Robot Khái niệm Robot đời vào ngày 09/10/1922 New York, nhà soạn kịch người Tiệp Khắc Karen Kapek tưởng tượng cỗ máy hoạt động cách tự động, niềm mơ ước người lúc Từ ý tưởng thiết kế, chế tạo Robot ln thơi thúc người Đến năm 1948, phịng thí nghiệm quốc gia Argonne, Goertz chế tạo thành công tay máy đôi (Master - Slave Manipulator) Đến năm 1954, Goertz chế tạo tay máy đôi sử dụng động Servo nhận biết lực tác động nên khâu cuối Năm 1956 hãng Generall Mills chế tạo tay máy hoạt động việc thám hiểm đại dương Năm 1968 R.S Mosher, General Electric chế tạo cỗ máy biết chân Hệ thống vận hành động đốt chân vận hành hệ thống Servo thủy lực Năm 1969, đại học Stanford thiết kế Robot tự hành nhờ nhận dạng hình ảnh Năm 1970 người chế tạo Robot tự hành Lunokohod, thám hiểm bề mặt mặt trăng Hình 1.1 Robot Shakey Trong giai đoạn này, nhiều nước khác tiến hành công tác nghiên cứu tương tự, tạo Robot điều khiển máy tính có lắp đặt loại cảm biến thiết bị giao tiếp người máy Theo tiến khoa học kỹ thuật, Robot ngày chế tạo nhỏ gọn hơn, thực nhiều chức hơn, thông minh Một lĩnh vực nhiều nước quan tâm Robot tự hành, chuyển động chúng ngày đa dạng, bắt trước chuyển động chân người hay lồi động vật như: bị sát, động vật chân, Và loại xe Robot (Robocar) nhanh chóng ứng dụng rộng rãi hệ thống sản xuất tự động linh hoạt FMS (Flexible Manufactuing System) Hình 1.2 Robot Hexapod TU Munich Từ trở người liên tục nghiên cứu phát triển Robot để ứng dụng q trình tự động hố sản xuất để tăng hiệu kinh doanh Ngoài Robot sử dụng thay cho người công việc môi trường độc hại, khắc nghiệt Chuyên ngành khoa học Robot “Robotics” trở thành lĩnh vực rộng khoa học, bao gồm vấn đề cấu trúc cấu động học, động lực học, quĩ đạo chuyển động, chất lượng điều khiển Tuỳ thuộc vào mục đích phương thức tiếp cận, tìm hiểu lĩnh vực nhiều khía cạnh khác Hiện nay, phân biệt loại Robot hai mảng chính: Các loại Robot công nghiệp (cánh tay máy) loại Robot di động (Mobile Robot) Mỗi loại có ứng dụng đặc tính khác Ngồi ra, loại Robot cơng nghiệp cịn phân chia dựa vào cấu tạo động học nó: Robot nối tiếp (Series Robot) Robot song song (Parallel Robot) 1.2 Phân loại Robot Phân loại Robot công nghiệp theo ngành nghề công nghiệp: - Robot sử dụng ngành sản xuất oto xe máy – Automotive Industry - Robot sử dụng gia cơng khí - Robot sử dụng ngành dược phẩm, y tế - Robot sử dụng ngành hóa chất - Robot sử dụng ngành cơng nghiệp gỗ - Robot sử dụng ngành chế tạo linh kiện điện tử 1.3 Ứng dụng Robot vận chuyển hàng hóa Robot vận chuyển hàng nhà máy, cơng xưởng sản phẩm tự động hóa có khả điều hướng lập trình người Theo đó, Robot lập trình theo điểm đánh dấu sẵn băng từ, dây điện sàn sử dụng laser điều hướng để để vận chuyển hàng đến nơi quy định Hiện Robot vận chuyển ứng dụng vô phổ biến, chúng thường sử dụng nhà máy để di chuyển vật tư, di chuyển sản phẩm cách an tồn, hiệu nhanh chóng So với việc vận chuyển phương pháp truyền thống hay dựa vào sức lực cơng nhân sử dụng Robot vận chuyển nhà máy đạt nhiều ưu điểm vượt trội, cụ thể sau:  Robot vận chuyển hoạt động liên tục 24/24h, ưu điểm vượt trội so sánh vào sức người, người làm việc liên tục 24h Robot vận chuyển di chuyển hàng hóa từ tất vị trí lập trình sẵn, bao quát toàn nhà xưởng, điều dùng sức người khó  đáp ứng diện tích kho hàng lớn  Robot vận chuyển di chuyển khối lượng hàng hóa lớn hơn, nhanh chóng suất Con người cần giám sát theo dõi tồn q trình, việc cịn lại hồn tồn tự động Qua số phân tích đây, thấy ưu điểm vượt trội sử dụng Robot vận chuyển nhà máy, vừa nâng cao hiệu quả, nâng cao suất lại tiết kiệm chi phí thời gian Qua tiết kiệm chi phí nhân cơng, tăng suất lao động từ tăng tính cạnh tranh cho doanh nghiệp Robot vận chuyển nhà máy thay phương tiện vận hành thủ cơng, mang lại nhiều lợi ích thiết thực cho doanh nghiệp:  Đảm bảo suất chất lượng công việc, tiết kiệm nhân lực thời gian Tồn quy trình vận hành tự động, người lao động cần giám sát lập trình theo yêu cầu kỹ thuật  Cung cấp giải pháp di chuyển an toàn, hiệu quả, tiết kiệm chi phí tối ưu cho doanh nghiệp   Ngồi Robot vận chuyển cịn cịn làm tăng hiệu suất, tăng tính cạnh tranh cho doanh nghiệp 1128 hal_nrf_rw(value); 1129 } 1130 else // single byte L01 command 1131 { 1132 retval = hal_nrf_rw(reg); 1133 } 1134 } 1135 NCS_SetHigh(); 1136 return retval; 1137 } 1138 /****************************************************** ************************* 1139 * Basis function, read_multibyte register 1140 * Use this function to read multiple bytes from a mult ibyte radio-register 1141 * @param reg Multibyte register to read from 1142 * @param *pbuf Pointer to buffer in which to store rea d bytes to 1143 * @return pipe# of received data (MSB), if operation u sed by a hal_nrf_read_rx_pload 1144 * @return length of read data (LSB), either for hal_nr f_read_rx_pload or 1145 * for hal_nrf_get_address 1146 ******************************************************* ************************/ 1147 uint16_t hal_nrf_read_multibyte_reg(uint8_t reg, uint8_ t *pbuf) 1148 { 1149 uint8_t ctr, length; 1150 1151 switch(reg) 1152 { 1153 case HAL_NRF_PIPE0: 1154 case HAL_NRF_PIPE1: 1155 case HAL_NRF_TX: 1156 length = ctr = hal_nrf_get_address_width(); 1157 1158 1159 1160 ) 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 NCS_SetLow(); hal_nrf_rw(RX_ADDR_P0 + reg); case HAL_NRF_RX_PLOAD: if((reg = hal_nrf_get_rx_data_source()) < { length = ctr = hal_nrf_read_rx_pl_w(); NCS_SetLow(); hal_nrf_rw(RD_RX_PLOAD); } else { ctr = length = 0; } break; default: ctr = length = 0; break; } 1175 while(ctr ) 1176 { 1177 *pbuf++ = hal_nrf_rw(0); 1178 } 1179 NCS_SetHigh(); 1180 return (((uint16_t) reg RFT_2G4HZ_TX_LEN) 105 { 106 put_rft_bytes_length = RFT_2G4HZ_TX_LEN; 107 com_dat.rft_flg.bits.error = 1; 108 } 109 } 110 /****************************************************** ************************* 111 * 112 ******************************************************* ************************/ 113 void RftReadRxBuffer(void) 114 { 115 if(get_rft_bytes_length > RFT_2G4HZ_RX_LEN) 116 { 117 get_rft_bytes_length = RFT_2G4HZ_RX_LEN; 118 com_dat.rft_flg.bits.error = 1; 119 } 120 if((com_dat.rft_rx[4] == (PC_CMD | NA_PLC)) && ((co m_dat.rft_rx[5] & 0x0f) == NA_HMI)) 121 { 122 com_dat.rft_flg_hmi.byte = com_dat.rft_rx[5] & 0xf0; 123 com_dat.rft_kc_data.byte = com_dat.rft_rx[COM_D ATA_ADD]; 124 com_dat.rft_kc_cmd.byte = com_dat.rft_rx[COM_DA TA_ADD + 1]; 125 com_dat.rft_tran_hmi.bits.get_data = 1; 126 com_dat.rft_flg.bits.error = 0; 127 } 128 else if((com_dat.rft_rx[4] == (PC_STA | NA_PLC)) && ((com_dat.rft_rx[5] & 0x0f) == NA_HMI)) 129 { 130 com_dat.rft_flg_hmi.byte = com_dat.rft_rx[5] & 0xf0; 131 com_dat.rft_flg.bits.error = 0; 132 } 133 else if((com_dat.rft_rx[4] == (PC_CMD | NA_PLC)) && ((com_dat.rft_rx[5] & 0x0f) == NA_RB1)) 134 { 135 com_dat.rft_flg_rb1.byte = com_dat.rft_rx[5] & 0xf0; 136 plc_dat.Rb1_StaL.byte = com_dat.rft_rx[COM_DATA _ADD]; 137 plc_dat.Rb1_StaH.byte = com_dat.rft_rx[COM_DATA _ADD + 1]; 138 plc_dat.Rb1_CtrLBack.byte = com_dat.rft_rx[COM_ DATA_ADD]; 139 plc_dat.Rb1_CtrHBack.byte = com_dat.rft_rx[COM_ DATA_ADD + 1]; 140 com_dat.rft_tran_rb1.bits.get_data = 1; 141 com_dat.rft_flg.bits.error = 0; 142 } 143 else if((com_dat.rft_rx[4] == (PC_STA | NA_PLC)) && ((com_dat.rft_rx[5] & 0x0f) == NA_RB1)) 144 { 145 com_dat.rft_flg_rb1.byte = com_dat.rft_rx[5] & 0xf0; 146 plc_dat.Rb1_StaL.byte = com_dat.rft_rx[COM_DATA _ADD]; 147 plc_dat.Rb1_StaH.byte = com_dat.rft_rx[COM_DATA _ADD + 1]; 148 com_dat.rft_tran_rb1.bits.get_data = 1; 149 com_dat.rft_flg.bits.error = 0; 150 } 151 else if((com_dat.rft_rx[4] == (PC_CMD | NA_PLC)) && ((com_dat.rft_rx[5] & 0x0f) == NA_RB2)) 152 { 153 com_dat.rft_flg_rb2.byte = com_dat.rft_rx[5] & 0xf0; 154 plc_dat.Rb2_StaL.byte = com_dat.rft_rx[COM_DATA _ADD]; 155 plc_dat.Rb2_StaH.byte = com_dat.rft_rx[COM_DATA _ADD + 1]; 156 plc_dat.Rb2_CtrLBack.byte = com_dat.rft_rx[COM_ DATA_ADD]; 157 plc_dat.Rb2_CtrHBack.byte = com_dat.rft_rx[COM_ DATA_ADD + 1]; 158 com_dat.rft_tran_rb2.bits.get_data = 1; 159 com_dat.rft_flg.bits.error = 0; 160 } 161 else if((com_dat.rft_rx[4] == (PC_STA | NA_PLC)) && ((com_dat.rft_rx[5] & 0x0f) == NA_RB2)) 162 { 163 com_dat.rft_flg_rb2.byte = com_dat.rft_rx[5] & 0xf0; 164 plc_dat.Rb2_StaL.byte = com_dat.rft_rx[COM_DATA _ADD]; 165 plc_dat.Rb2_StaH.byte = com_dat.rft_rx[COM_DATA _ADD + 1]; 166 com_dat.rft_tran_rb2.bits.get_data = 1; 167 com_dat.rft_flg.bits.error = 0; 168 } 169 else 170 { 171 com_dat.rft_flg.bits.error = 1; 172 } 173 RftResetReceive(); 174 } 175 /****************************************************** ************************* 176 * 177 ******************************************************* ************************/ 178 void RftPutting(void) 179 { 180 uint8_t ByteCount = 0; 181 182 if(com_dat.rft_flg.bits.putData) 183 { 184 if(!com_dat.rft_flg.bits.putDelay && !com_dat.r ft_flg.bits.pac_dl) 185 { 186 if((LinkStatus == LINK_IDLE) || \ 187 (LinkStatus == LINK_PL_TRANSMITTED) || \ 188 S) || \ 189 (LinkStatus == LINK_PL_TRANSMIT_LOS (LinkStatus == LINK_LISTENING) || \ 190 (LinkStatus == LINK_PL_TRANSMITTED_ RECEIVED)) 191 { 192 //while(!hal_nrf_tx_fifo_full()) 193 //{ 194 clear_bcd_array(&TxPayload[0], RFT_ 2G4HZ_TX_PAC_MAX); 195 ByteCount = 0; 196 while(ByteCount < RFT_2G4HZ_TX_PAC_ MAX) 197 { 198 TxPayload[ByteCount++] = com_da t.rft_tx[put_rft_bytes_count]; 199 if(++put_rft_bytes_count >= put _rft_bytes_length) 200 { 201 put_rft_bytes_count = 0; 202 com_dat.rft_flg.bits.putDat a = 0; 203 break; 204 } 205 } 206 // if(!com_dat.rft_flg.bits.putData) 207 // break; 208 //} 209 if(com_dat.rft_flg.bits.putData) 210 com_dat.rft_flg.bits.pac_dl = 1; 211 com_dat.rft_flg.bits.putDelay = 1; 212 EXT_INT_InterruptDisable(); 213 hal_nrf_write_tx_pload(TxPayload, RF_TX _PAYLOAD_LENGTH); 214 EXT_INT_InterruptEnable(); 215 nRF24L01pStartNewTransceiver(); 216 } 217 } 218 } 219 else if(!com_dat.rft_flg.bits.putDelay && (Communic ationMode != RX_MODE)) 220 { 221 if((LinkStatus == LINK_PL_TRANSMITTED) || \ 222 (LinkStatus == LINK_PL_TRANSMIT_LOSS) | | \ 223 (LinkStatus == LINK_LISTENING) || \ 224 (LinkStatus == LINK_PL_TRANSMITTED_RECE IVED)) 225 { 226 RftResetReceive(); 227 nRF24L01pSetupNewCommunication(RX_MODE); 228 nRF24L01pStartNewTransceiver(); 229 } 230 } 231 } 232 /****************************************************** ************************* 233 * 234 ******************************************************* ************************/ 235 void RftGetting(void) 236 { 237 uint8_t ByteCount = 0; 238 239 if((LinkStatus == LINK_PL_RECEIVED) || \ 240 (LinkStatus == LINK_PL_TRANSMITTED_RECEIVED )) 241 { 242 EXT_INT_InterruptDisable(); 243 while(!hal_nrf_rx_fifo_empty()) 244 { 245 RxPipeNumber = hal_nrf_get_rx_data_source() ; 246 clear_bcd_array(&RxPayload[0], RFT_2G4HZ_RX _PAC_MAX); 247 hal_nrf_read_rx_pload(RxPayload); 248 if(!com_dat.rft_flg.bits.getDelay && (RxPip eNumber = 6) 267 { 268 get_rft_bytes_length = com_ dat.rft_rx[get_rft_bytes_count]; 269 } 270 else 271 { 272 com_dat.rft_flg.bits.getDel ay = 1; 273 com_dat.rft_flg.bits.error = 1; 274 275 276 277 278 _bytes_length) 279 280 281 1; 282 1; 283 RftResetReceive(); break; } } if(++get_rft_bytes_count >= get_rft { get_rft_bytes_count = 0; com_dat.rft_flg.bits.gotData = com_dat.rft_flg.bits.getDelay = com_dat.rft_flg.bits.error = 0; 284 break; 285 } 286 } 287 } 288 } 289 hal_nrf_get_clear_irq_flags(); 290 LinkStatus = LINK_LISTENING; 291 com_dat.rft_flg.bits.RxNextSlave = 1; 292 EXT_INT_InterruptEnable(); 293 } 294 } 295 /****************************************************** ************************* 296 * 297 ******************************************************* ************************/ 298 void RftPuttingTimer(void) 299 { 300 if(com_dat.rft_flg.bits.putDelay) 301 { 302 if(com_dat.rft_flg.bits.pac_dl) 303 { 304 if(++put_rft_delay_count >= PUT_RFT_PAC_DL_ TMR) 305 { 306 put_rft_delay_count = 0; 307 com_dat.rft_flg.bits.putDelay = 0; 308 com_dat.rft_flg.bits.pac_dl = 0; 309 } 310 } 311 else 312 { 313 if(++put_rft_delay_count >= PUT_RFT_DELAY_T MR) 314 { 315 put_rft_delay_count = 0; 316 com_dat.rft_flg.bits.putDelay = 0; 317 RftResetTransmit(); 318 } 319 } 320 } 321 else 322 { 323 put_rft_delay_count = 0; 324 if(com_dat.rft_flg.bits.putData) 325 { 326 if(++put_rft_wait_count >= PUT_RFT_WAIT_TMR ) 327 { 328 put_rft_wait_count = 0; 329 com_dat.rft_flg.bits.putData = 0; 330 com_dat.rft_flg.bits.error = 1; 331 RftResetTransmit(); 332 } 333 } 334 else 335 { 336 put_rft_wait_count = 0; 337 } 338 } 339 } 340 /****************************************************** ************************* 341 * 342 ******************************************************* ************************/ 343 void RftGettingTimer(void) 344 { 345 if(com_dat.rft_flg.bits.getDelay) 346 { 347 if(++get_rft_delay_count >= GET_RFT_DELAY_TMR) 348 { 349 get_rft_delay_count = 0; 350 com_dat.rft_flg.bits.getDelay = 0; 351 RftResetReceive(); 352 } 353 } 354 else 355 { 356 get_rft_delay_count = 0; 357 if(get_rft_bytes_count && !com_dat.rft_flg.bits gotData) 358 { 359 if(++get_rft_wait_count >= GET_RFT_WAIT_TMR ) 360 { 361 get_rft_wait_count = 0; 362 com_dat.rft_flg.bits.error = 1; 363 RftResetReceive(); 364 } 365 } 366 else 367 { 368 get_rft_wait_count = 0; 369 } 370 } 371 if(CommunicationMode == RX_MODE) 372 { 373 if(++RxNextSlaveCount >= RX_NEXT_SLAVE_TIMER) 374 { 375 RxNextSlaveCount = 0; 376 com_dat.rft_flg.bits.RxNextSlave = 1; 377 CommunicationMode = IDLE_MODE; 378 nRF24L01pSetupNewCommunication(RX_MODE); 379 nRF24L01pStartNewTransceiver(); 380 } 381 } 382 else 383 { 384 RxNextSlaveCount = 0; 385 } 386 if(com_dat.rft_flg.bits.RxNextSlave) 387 { 388 com_dat.rft_flg.bits.RxNextSlave = 0; 389 if(++RxSlaveCount > 2) RxSlaveCount = 0; 390 } 391 } 392 /****************************************************** ************************* 393 * 394 ******************************************************* ************************/ 395 void RftResetTransmit() 396 { 397 clear_bcd_array(&com_dat.rft_tx[0], RFT_2G4HZ_TX_LE N); 398 put_rft_bytes_length = RFT_2G4HZ_TX_LEN; 399 put_rft_bytes_count = 0; 400 } 401 /****************************************************** ************************* 402 * 403 ******************************************************* ************************/ 404 void RftResetReceive(void) 405 { 406 clear_bcd_array(&com_dat.rft_rx[0], RFT_2G4HZ_RX_LE N); 407 get_rft_bytes_length = RFT_2G4HZ_RX_LEN; 408 get_rft_bytes_count = 0; 409 } 410 #endif 411 /****************************************************** ************************* 412 * End of File 413 ******************************************************* ************************/ DANH MỤC TÀI LIỆU THAM KHẢO Tiếng Việt: Vi xử lý vi diều khiển, PGS.TS Phạm Mạnh Thắng (2016), NXB Đại học Quốc Gia Hà Nội Vi điều khiển PIC, nhiều tác giả (2018), NXB Thanh Niên, phát hành nhà sách Hồng Ân Mạng truyền thơng cơng nghiệp, Hồng Minh Sơn, NXB Khoa Học Và Kỹ Thuật Hà Nội (2006) Giáo trình ngơn ngữ lập trình C++, TS Vũ Việt Vũ, NXB Khoa Học Và Kỹ Thuật (2012) Tiếng Anh Website: https://www.microchip.com https://deviot.vn https://tailieu.tv https://dientuviet.com

Ngày đăng: 11/10/2023, 00:24

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

Tài liệu liên quan