1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu thiết kế và chế tạo robot cung cấp nguyên vật liệu tự động cho các trạm sản xuất lắp ráp trong nhà máy công nghiệp

88 21 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 88
Dung lượng 5,52 MB

Nội dung

Luận văn thạc sĩ MỤC LỤC MỤC LỤC Lời cam đoan - Danh mục ký hiệu, chữ viết tắt Danh mục bảng Danh mục hình vẽ - MỞ ĐẦU - Lý chọn đề tài Mục đích, đối tượng phạm vi nghiên cứu luận văn - Tóm tắt - Phương pháp nghiên cứu - CHƯƠNG I: TỔNG QUAN VỀ ROBOT 1.1 Sơ lược Robot - 1.1.1 Lịch sử phát triển - 1.1.2 Các dạng robot ứng dụng -10 1.2 Robot tự hành 13 CHƯƠNG II: THIẾT KẾ PHẦN CỨNG CHO ROBOT -15 2.1 Xây dựng mơ hình -15 2.2 Động -19 2.2.1 Các loại động -19 2.2.2 Công suất động 20 2.2.3 Điều khiển động -23 2.3 Cảm biến, hiển thị phương pháp điều khiển 25 2.3.1 Cảm biến dò đường -25 2.3.2 La bàn số -29 2.3.3 Cảm biến tiệm cận 30 2.3.4 Màn hình hiển thị LCD -31 2.3.5 Cảm biến siêu âm -33 2.3.6 Bộ thu phát nRF24L01+ -36 Nguyễn Văn Xơ Ḷn văn thạc sĩ CHƯƠNG III: LẬP TRÌNH ĐIỀU KHIỂN HỆ THỐNG ROBOT -39 3.1 Phần mềm điều khiển hệ thống 39 3.1.1 Lập trình ngơn ngữ C++ Visual Studio -39 3.1.2 Sơ đồ khối lưu đồ thuật toán điều khiển hệ thống -40 3.1.3 Giao diện điều khiển hệ thống 45 3.2 Module Arduino -45 3.2.1 Giới thiệu Arduino 45 3.2.2 Cấu trúc Arduino 48 3.2.3 Mơi trường lập trình bo mạch Arduino -49 3.2.4 Lập trình điều khiển động sử dụng Timer/Counter 50 3.2.5 Lập trình giao tiếp ngoại vi để điều khiển robot -56 3.2.6 Sơ đồ khối lưu đồ thuật toán điều khiển Robot 64 CHƯƠNG IV 69 KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 69 TÀI LIỆU THAM KHẢO -70 PHỤ LỤC 71 Nguyễn Văn Xô Luận văn thạc sĩ Lời cam đoan Tôi tên Nguyễn Văn Xô học viên cao học lớp 13BCĐT.KT khóa 2013B Chuyên ngành: Cơ Điện Tử Đề tài: Nghiên cứu thiết kế chế tạo robot cung cấp nguyên vật liệu tự động cho trạm sản xuất lắp ráp nhà máy cơng nghiệp Giảng viên hướng dẫn: TS Nguyễn Chí Hưng Tôi xin cam đoan nghiên cứu, thực nghiệm luận văn tác giả thực Hà Nội, ngày 21 tháng năm 2015 Tác giả luận văn: Nguyễn Văn Xô Nguyễn Văn Xô Luận văn thạc sĩ Danh mục ký hiệu, chữ viết tắt AGV Autonomous Guided Vehicles PID Propotional Integral Derivative AUV Autonomous Underwater PWM Pulse Width Modulation Vehicles CE Chip Enable R/W Read/Write CIM Computer Intergrated SCK Serial Clock (SPI) Manufacturing CNC Computer Numerial Control SCL Serial Clock (I2C) COM Compare Output Match SDA Serial Data CS Clock Select SECS SEMI Equipment Communications Standard GND Ground SEMI Semiconductor Equipment and Material International H/L High/Low SPI Serial Peripheral Interface HSMS High speed SECS Message SS Slave Select Services I/O Input/Output T/C Timer/Counter I2C TwoWire Serial Intereafce TCCR Timer/Counter Control Register ICP Input Capture Pin TCNT ICR Input Capture Register TCP Transmission Control Protocol IRQ Interrupt Request TIFR Timer/Counter Interrupt Flag Register LCD Liquid Crystal Display TIMSK Timer Interrupt Mask Register LSB Least Significant Bit TWI TwoWire Serial Intereafce UART Universal Asynchronous Receiver MEMS Micro Electro Mechanical System Transmitter MFC Microsoft Foundation Class UAV Unmanned Arial Vehicles MISO Master Input / Slave Output WGM Waveform Generating Mode MOSI Master Output / Slave Input OC Ouput Compare MSB Most Significant Bit OCR Ouput Compare Register Nguyễn Văn Xô Luận văn thạc sĩ Danh mục bảng Bảng : Chức chân LCD Bảng Bố trí chân PWM Arduino Bảng Bảng chế độ chọn xung nhịp timer Bảng Các chế độ điều khiển PWM Bảng Ngắt Arduino Bảng Các ghi HMC5883L Danh mục hình vẽ Hình 1.1 Robot hàm điểm nhà máy sản xuất xe Hình 1.2 Robot gỡ bom, mìn quân Hình 1.3 Ứng dụng khơng gian Hình 2.1 Một số loại khay đựng linh kiện lắp ráp cơng nghiệp Hình 2.2 Mơ hình kết cấu robot Hình 2.3 Sử dụng băng tải dây chuyền sản xuất Hình 2.4 Phần đế lắp nguồn mạch điều khiển robot Hình 2.5 Băng tải chuyển vật liệu Hình 2.6 Mơ hình robot thực tế Hình 2.7 Cấu tạo encoder Hình 2.8 Hai kênh A B lệch pha encoder Hình 2.9 Robot di chuyển theo vạch Hình 2.10 Một số cảm biến nguyên lý nhận diện vạch trắng Hình 2.11 Cách bố trí cảm biến dị đường Hình 2.12 Các trường hợp có với cảm biến Hình 2.13 Sự thay đổi điện trở tác dụng từ trường Hình 2.14 Sơ đồ khối giao tiếp I2C HMC5883L Hình 2.15 Nguyên lý hoạt động cấu tạo cảm biến tiệm cận cảm ứng Hình 2.16 Sơ đồ chân LCD Hình 2.17 Nguyên lý hoạt động cảm biến siêu âm Hình 2.18 Module SRF05 Hình 2.19 Biểu đồ thời gian hoạt động SRF05 Nguyễn Văn Xơ Ḷn văn thạc sĩ Hình 2.20 Module nRF24L01+ Hình 2.21 Sơ đồ khối chức nRF24L01+ Hình 3.1 Sơ đồ khối điều khiển hệ thống Hình 3.2 Lưu đồ thuật tốn điều khiển hệ thống Hình 3.3 Sơ đồ khối nhà máy Hình 3.4 Log file hệ thống robot Hình 3.5 Giao diện điều khiển hệ thống Hình 3.6 Một số loại module Arduino Hình 3.7 Một số ứng dụng Arduino Hình 3.8 Giao diện Arduino IDE Hình 3.9 Chế độ Fast PWM Phase Correct PWM Hình 3.10 Mạng TWI (I2C) với nhiều thiết bị Hình 3.11 Sơ đồ khối mạch điều khiển robot Hình 3.12 Lưu đồ thuật tốn điều khiển robot Hình 3.13 Sơ đồ khối mạch điều khiển hệ thống Hình 3.14 Lưu đồ thuật tốn điều khiển hệ thống Nguyễn Văn Xô Luận văn thạc sĩ MỞ ĐẦU Lý chọn đề tài Nền công nghiệp giới ngày phát triển, hệ thống máy móc dây chuyền sản xuất đại hố, chun mơn hố chức để thực nhiệm vụ yêu cầu sản xuất khác Các vấn đề tự động điều khiển thiết bị tự động hố đặt lên hàng đầu q trình nghiên cứu ứng dụng công nghệ vào sản xuất Nó địi hỏi khả xử lý, mức độ hồn hảo, xác hệ thống ngày cao để đáp ứng nhu cầu số lượng, chất lượng, thẩm mỹ nhu cầu giải phóng sức lao động người, nâng cao hiệu lao động sản xuất Với phát triển dây chuyền sản xuất tự động hố robot ngày sử dụng nhiều trình sản xuất Việt Nam thu hút nhiều nhà đầu tư nước Các nhà máy chế tạo lắp ráp linh kiện với mức độ tự động hóa cao xây dựng khắp nơi Tuy nhiên mối quan tâm chủ yếu việc tự động hóa dây chuyền lắp ráp cịn việc vận chuyển nguyên vật liệu thiết bị, line sản xuất chưa quan tâm nhiều; có vài cơng ty áp dụng cịn nhiều hạn chế Trước nhu cầu thực tiễn sản xuất cần cải tiến tự động hóa cung cấp nguyên vật liệu tác giả định nghiên cứu chế tạo phát triển hệ thống robot tự hành cung cấp nguyên vật liệu tự động cho trạm lắp ráp sản phẩm cơng nghiệp Mục đích, đối tượng phạm vi nghiên cứu luận văn Mục đích: Thiết kế robot vận chuyển nguyên vật liệu nhà máy xây dựng hệ thống điều khiển, theo dõi hoạt động robot Đối tượng nghiên cứu: Robot vận chuyển nguyên vật liệu Phạm vi nghiên cứu: Nghiên cứu điều khiển hệ thống robot vận chuyển nguyên vật liệu tự động nhà máy Tóm tắt Luận văn trình bày gồm chương: Chương 1: Trình bày tổng quan robot việc áp dụng robot vào thực tế Chương 2: Nghiên cứu lý thuyết tính tốn thiết kế phần cứng cho robot Nguyễn Văn Xơ Luận văn thạc sĩ Từ yêu cầu chức robot xây dựng kết cấu, chọn động cơ, loại cảm biến phương pháp điều khiển robot Chương 3: Thuật tốn lập trình điều khiển robot Dựa vào thực tiễn xác định yêu cầu, chức robot hệ thống điều khiển Từ xây dựng thuật toán điều khiển cho robot hệ thống Chương 4: Kết hướng phát triển đề tài Phương pháp nghiên cứu Luận văn sử dụng phương pháp nghiên cứu lý thuyết kết hợp với kinh nghiệm thực tiễn sản xuất: Luận văn nghiên cứu loại robot tự hành, loại cảm biến cần thiết cho hoạt động phương pháp điều khiển robot Dựa vào trình thực tế sản xuất đề yêu cầu cho robot xây dựng phần mềm điều khiển hệ thống robot liên kết với hệ thống sản xuất Nguyễn Văn Xô Luận văn thạc sĩ CHƯƠNG I TỔNG QUAN VỀ ROBOT 1.1 Sơ lược Robot 1.1.1 Lịch sử phát triển Thuật ngữ robot sinh từ sân khấu, phân xưởng sản xuất Những robot xuất lần NewYork vào ngày 09/10/1922 “Rossum’s Universal Robot” nhà soạn kịch người Tiệp Karen Kapek viết năm 1921, từ robot cách gọi tắt từ robota - theo tiếng Tiệp có nghĩa cơng việc lao dịch Những robot thực có ích nghiên cứu để đưa vào ứng dụng công nghiệp thực lại tay máy Vào năm 1948, nhà nghiên cứu Goertz nghiên cứu chế tạo loại tay máy đôi điều khiển từ xa đầu tiên, năm hãng General Mills chế tạo tay máy gần tương tự sử dụng cấu tác động động điện kết hợp với cơng tắc hành trình Đến năm 1954, Goertz tiếp tục chế tạo dạng tay máy đôi sử dụng động servo nhận biết lực tác động lên khâu cuối Sử dụng thành đó, vào năm 1956 hãng General Mills cho đời tay máy hoạt động công việc khảo sát đáy biển Năm 1968 R.S Mosher, thuộc hãng General Electric, chế tạo thiết bị biết có bốn chân sử dụng động đốt có cơng suất 100 mã lực Năm 1969 viện nghiên cứu thuộc Trường Đại học Stanford thiết kế robot Shakey di động tinh vi để thực thí nghiệm điều khiển sử dụng hệ thống thu nhận hình ảnh để nhận dạng đối tượng Robot lập trình trước để nhận dạng đối tượng camera, xác định đường đến đối tượng thực số tác động đối tượng Năm 1952 máy điều khiển trương trình số đời Học Viện Công Nghệ Massachustts (Hoa Kỳ) Trên sở năm 1954, George Devol thiết kế robot lập trình với điều khiển chương trình số nhờ thiết bị ơng phát minh gọi thiết bị chuyển khớp lập trình Joseph Engelberger, người mà ngày thường gọi cha đẻ robot công nghiệp, thành lập hãng Unimation sau mua quyền thiết bị Devol sau phát triển hệ robot điều khiển theo chương trình Năm 1962, robot Unmation đưa Nguyễn Văn Xô Luận văn thạc sĩ vào sử dụng hãng General Motors; năm 1976 cánh tay robot không gian sử dụng tàu thám hiểm Viking quan không gian NASA Hoa Kỳ để lấy mẫu đất Hoả Một thành tựu khoa học công nghệ đáng kể đạt vào năm 1970 xe tự hành thám hiểm bề mặt mặt trăng Lunokohod điều khiển từ trái đất Trong hoạt động sản xuất, đa số robot công nghiệp có hình dạng “cánh tay khí” sản xuất mang lại lợi ích to lớn, mà đơi ta gặp thuật ngữ người máy - tay máy tài liệu tham khảo giáo trình robot Ngày có nhiều robot hoạt động hoàn toàn tự động theo chương trình lập trình sẵn Tuy nhiên có nhiều cơng việc phức tạp cần có điều khiển mềm dẻo linh hoạt người Ngoài robot cịn tiếp cận vị trí mà người khó thực hay môi trường độc hại nguy hiểm; người phải vận hành robot vị trí cách xa mơi trường làm việc Theo dự đốn vịng 20 năm người có nhu cầu sử dụng robot cá nhân nhu cầu máy tính PC robot tâm điểm cách mạng lớn sau Internet Với xu hướng này, ứng dụng truyền thống khác robot công nghiệp, y tế, giáo dục đào tạo, giải trí đặc biệt an ninh quốc phịng thị trường robot vơ to lớn 1.1.2 Các dạng robot ứng dụng Robot có bước tiến đáng kể nửa kỷ qua Robot ứng dụng công nghiệp vào năm 60 để thay người làm công việc nặng nhọc, nguy hiểm môi trường độc hại Do nhu cầu sử dụng ngày nhiều trình sản xuất phức tạp nên robot cơng nghiệp cần có khả thích ứng linh hoạt thơng minh Ngày nay, ngồi ứng dụng sơ khai ban đầu robot chế tạo máy ứng dụng khác y tế, chăm sóc sức khỏe, nơng nghiệp, đóng tàu, xây dựng, an ninh quốc phòng động lực cho phát triển ngành cơng nghiệp robot Có thể kể đến loại robot quan tâm nhiều thời gian qua là: tay máy robot (Robot Manipulators), robot di động (Mobile Robots), robot sinh Nguyễn Văn Xô 10 Luận văn thạc sĩ GetdataHMC5883(); GetdataSRF(); GotoLINE(); if(CarState==0){ PWMtrai1 = 2; PWMphai1 = 2;} if(CarState == 1){ if(tc == 0) { countline = true; } if(countline){ if(tc == 1){ demvach ++; if(demvach==1)dem =1; else if(demvach==2)dem=2; else if(demvach==3)dem=3; else if(demvach==5)dem=4; else if(demvach==7)dem=5; else if(demvach==9)dem=6; else if(demvach==12)dem=7; else if(demvach==14)dem=8; else if(demvach==16)dem=9; else if(demvach==18)dem=10; else if(demvach==19)dem=11; else if(demvach==20)dem=12; char charvach[5],sendvach[10]="4007,"; dtostrf(demvach,10,0,charvach); strcat(sendvach,charvach); strcpy(RF_send,sendvach); nRF24_send(); countline =false; } } if(ss2==0 && ss3==0 && ss4==1){ PWMtrai1=xung+4; PWMphai1=xung-4; lech =1; } else if(ss2==0 && ss3==1 && ss4==1){ PWMtrai1=xung+2; PWMphai1=xung-2; } else if(ss2==1 && ss3==1 && ss4==0){ PWMtrai1=xung-2; PWMphai1=xung+2; } else if(ss2==1 && ss3==0 && ss4==0){ PWMtrai1=xung-4; PWMphai1=xung+4; lech =2; } else if(ss2==0 && ss3==0 && ss4==0){ if(lech==1){ PWMtrai1=xung+4; PWMphai1=xung-4; } if(lech==2){ PWMtrai1=xung-4; PWMphai1=xung+4; }} else{ PWMtrai1=xung; PWMphai1=xung; } if( dem == Vitrilay && Layvatlieu==true){ PWMtrai1 = 2; PWMphai1 = 2; strcpy(RF_send,"4009, 1"); nRF24_send(); delay(1000); Nguyễn Văn Xô digitalWrite(dirbangtai,LOW); PWMbangtai1 = 160; strcpy(RF_send,"4008, 11"); nRF24_send(); analogWrite(PWMbangtai,PWMbangtai1); if(distanceCm135){ PWMbangtai1=2; strcpy(RF_send,"4008, 22"); nRF24_send(); analogWrite(PWMbangtai,PWMbangtai1); delay(1000); strcpy(RF_send,"4009, 0"); nRF24_send(); PWMtrai1 = xung; PWMphai1 = xung; Travatlieu = false;} } if(demvach == 24){ PWMtrai1 = 2; PWMphai1 = 2; strcpy(RF_send,"4004, 24"); nRF24_send(); Vitrilay = 0; Vitritra = 0; CarState = 0; } if(dungcomp==1){ PWMtrai1 = 2; PWMphai1 = 2; } if(dungcomp ==0){ PWMtrai1 = xung; PWMphai1 = xung; dungcomp = 2; } if(distanceCm250){ PWMtrai1 = xung; PWMphai1 = xung; strcpy(RF_send,"4009, nRF24_send(); dungxedistance = false; } } 0"); } analogWrite(PWMtrai,PWMtrai1); analogWrite(PWMphai,PWMphai1); unsigned long currentMillis = millis(); tempmillis = currentMillis - previousMillis; if(tempmillis >= 300) { previousMillis = currentMillis; dtostrf(GocHMC, 10, 0, charVal); char temp[10] = "4006,"; strcat(temp,charVal); strcpy(RF_send,temp); nRF24_send(); char encodertemp[11]; dtostrf(encoder2,10,0,encodertemp); char sendEtemp[16] = "4005,"; strcat(sendEtemp,encodertemp); strcpy(RF_send,sendEtemp); nRF24_send(); sendEtemp[0]=0; } } void nRF24_receive(void) { int len = 0; if ( radio.available() ) { bool done = false; while ( !done ) { len = radio.getDynamicPayloadSize(); done = radio.read(&RF_receive,len); delay(5);} Serial.print("Receive:"); Serial.print(RF_receive); Serial.println(); char *x = strtok(RF_receive,","); char *y = strtok(NULL,","); char ychar[10]; strcpy(ychar,y); char *ya1,*ya2,ya2char[10],*yb1,*yb2; ya1 = strtok(ychar,"a"); ya2 = strtok(NULL,"a"); switch(atoi(x)) { case 2001: if(atoi(ya1)== 2){ strcpy(ya2char,ya2); yb1 = strtok(ya2char,"b"); yb2 = strtok(NULL,"b"); Vitrilay = atoi(yb1); Layvatlieu=true; Vitritra = atoi(yb2); Travatlieu=true; CarState = 1; lcd.clear(); lcd.setCursor(0,0); lcd.print("Chuyen tu vi tri"); Nguyễn Văn Xô lcd.setCursor(0,1); lcd.print(Vitrilay); lcd.setCursor(2,1); lcd.print(" sang vi tri"); lcd.setCursor(15,1); lcd.print(Vitritra); } break; case 2004: if(atoi(ya1)== 2){ if(atoi(ya2) == 0){ dungcomp=0;} if(atoi(ya2) == 1){ dungcomp=1;} Serial.print("dung:");Serial.print(dungcomp); } break; default : break } } } // end nRF_receive() void nRF24_send(void){ radio.openWritingPipe(pipes[1]); radio.openReadingPipe(0,pipes[0]); radio.stopListening(); strcat(RF_send,"\n"); bool ok = radio.write(&RF_send, strlen(RF_send)); RF_send[0]=0; radio.openWritingPipe(pipes[0]); radio.openReadingPipe(1,pipes[1]); radio.startListening(); } void serialEvent() { while( Serial.available()>0) { char incoming = Serial.read(); buf = buf + incoming; if(incoming == '\n') {p = 1;} }//end while if(p==1) { char chartemp[buf.length()]; buf.toCharArray(chartemp,buf.length()); buf = ""; p = 0; }//end if } // end serialEvent() void encodertrai(){ bool x; x = digitalRead(encoderT); if(x){ encoder1 ; } else{ encoder1 ++; } } void encoderphai(){ bool x; x = digitalRead(encoderP); if(x){ encoder2 ; } else{ encoder2 ++; } } void GetdataSRF(){ long duration1,duration2; digitalWrite(TRIG_PIN1, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN1, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN1, LOW); 75 Luận văn thạc sĩ duration1 = pulseIn(ECHO_PIN1,HIGH); distanceCm1 = duration1 / 29.1 / ; digitalWrite(TRIG_PIN2, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN2, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN2, LOW); duration2 = pulseIn(ECHO_PIN2,HIGH); distanceCm2 = duration2 / 29.1 / ; } void GotoLINE(){ tc = digitalRead(TC); clp = digitalRead(CLP); ss1 = digitalRead(SS1); ss2 = digitalRead(SS2); ss3 = digitalRead(SS3); ss4 = digitalRead(SS4); ss5 = digitalRead(SS5); near = digitalRead(NEAR); } void GetdataHMC5883(){ int x,y,z; Wire.beginTransmission(HMCAddress); Wire.write(0x03); Wire.endTransmission(); Wire.requestFrom(HMCAddress, 6); if(6BeforeDrawing(); glPushMatrix(); m_xuong.setMaterial(storageMaterial[2]); m_line.setMaterial(storageMaterial[5]); m_xe[1].setMaterial(storageMaterial[3]); m_xe[2].setMaterial(storageMaterial[3]); m_xe[3].setMaterial(storageMaterial[3]); m_vatlieu[1].setMaterial(storageMaterial[6]); m_vatlieu[2].setMaterial(storageMaterial[6]); m_vatlieu[3].setMaterial(storageMaterial[6]); m_pInitGL->UseUCS(); m_pInitGL->TranslateGL(); m_pInitGL->MouseMoveGL(); m_pInitGL->ScaleGL(); glPushMatrix(); glRotated(180, 0, 0, 1); m_xuong.drawObject(); glPopMatrix(); glPushMatrix(); glTranslated(0, 0, -5); m_line.drawObject(); glPopMatrix(); for (i = 1; i < 4; i++){ glPushMatrix(); glTranslated(0, 4500, 0); glTranslated(x[i], y[i], z[i]); glRotated(rx[i], 1, 0, 0); glRotated(ry[i], 0, 1, 0); glRotated(rz[i], 0, 0, 1); m_xe[i].drawObject(); glPopMatrix();} for (i = 1; i < 4; i++){ glPushMatrix(); glTranslated(0, 4500, 500); glTranslated(xv[i], yv[i], 0); glRotated(zv[i], 0, 0, 1); m_vatlieu[i].drawObject(); glPopMatrix();} glPopMatrix(); m_pInitGL->AfterDrawing(); } void CXoView::OnLButtonUp(UINT nFlags, CPoint point){ m_pInitGL->OnLeftButtonUp(); CView::OnLButtonUp(nFlags, point);} void CXoView::OnMouseMove(UINT nFlags, CPoint point){ m_pInitGL->OnMouseMove(point); CView::OnMouseMove(nFlags, point);} BOOL CXoView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){ m_pInitGL->OnMouseWheel(nFlags, zDelta, pt); 79 Luận văn thạc sĩ return CView::OnMouseWheel(nFlags, zDelta, pt);} void CXoView::OnLButtonDown(UINT nFlags, CPoint point){ m_pInitGL->OnLeftButtonDown(point); CView::OnLButtonDown(nFlags, point);} void CXoView::NhapGiaTri1(double _x1, double _y1, double _z1, double _rx1, double _ry1, double _rz1, double _x2, double _y2, double _z2, double _rx2, double _ry2, double _rz2, double _x3, double _y3, double _z3, double _rx3, double _ry3, double _rz3, double _xv1, double _yv1, double _zv1, double _xv2, double _yv2, double _zv2, double _xv3, double _yv3, double _zv3){ x[1] = x1 = _x1; y[1] = y1 = _y1; z[1] = z1 = _z1; ry[1] = ry1 = _ry1; x[2] = x2 = _x2; z[2] = z2 = _z2; ry[2] = ry2 = _ry2; x[3] = x3 = _x3; z[3] = z3 = _z3; ry[3] = ry3 = _ry3; xv[1] = xv1 = _xv1; xv[3] = xv3 = _xv3; yv[2] = yv2 = _yv2; zv[1] = zv1 = _zv1; zv[3] = zv3 = _zv3; Paint(); } rx[1] = rx1 = _rx1; rz[1] = rz1 = _rz1; y[2] = y2 = _y2; rx[2] = rx2 = _rx2; rz[2] = rz2 = _rz2; y[3] = y3 = _y3; rx[3] = rx3 = _rx3; rz[3] = rz3 = _rz3; xv[2] = xv2 = _xv2; yv[1] = yv1 = _yv1; yv[3] = yv3 = _yv3; zv[2] = zv2 = _zv c Chương trình tính tốn điều khiển: #pragma once #include "mscomm.h" #include "tchar.h" class CControlPanel : public CFormView{ DECLARE_DYNCREATE(CControlPanel) Protected: CControlPanel(); virtual ~CControlPanel(); public: enum { IDD = IDD_CONTROLPANEL }; #ifdef _DEBUG virtual void AssertValid() const; #ifndef _WIN32_WCE virtual void Dump(CDumpContext& dc) const; #endif #endif protected: virtual void DoDataExchange(CDataExchange* pDX); DECLARE_MESSAGE_MAP() public: double m_rx1, m_rx2, m_ry1, m_ry2, m_rz1, m_rz2, m_rx[4], m_ry[4], m_rz[4], m_x[4], m_y[4], m_z[4], m_xv[4], m_yv[4], m_zv[4], m_x1, m_x2, m_y1, m_y2, m_z1, m_z2, t[11], m_xv1=1500, m_xv2, m_xv3, m_yv1=2000, m_yv2, m_yv3, m_zv1, m_zv2, m_zv3, m_rx3, m_ry3, m_rz3, m_x3, m_y3, m_z3, VTX[13], VTY[13], VTX1[13], gocHMC; long RealEncoder, void Calculate(); afx_msg void OnTimer(UINT_PTR nIDEvent); CString m_transfer, transfer ,m_strNhan, m_ViTriCanVL, m_ViTriLayVL, m_test, m_vtx11, m_vtx12, m_vtx21, m_vtx22, m_vtx31, m_vtx32; CMSComm m_mscomm, m_mscomm1; void Setting(); virtual void OnInitialUpdate(); Nguyễn Văn Xô DECLARE_EVENTSINK_MAP() void OnOncommMscomm(); int SVID, xacnhan,CarState[4], TrangThai[4], runbangtai1[4], stopbangtai1[4], runbangtai2[4], stopbangtai2[4], i,j,k, ViTriLay[20],Vitri[20],StartTimer[55], Stoptimer[55], temp[30], dem, OnCom, dungTemp[4], demvach, dungdistance, dangchay[4], m_demchovl; bool dung[4], chuyenvanlieu[4], anstop[4]; void ClickXe1(); void ClickXe2(); void ClickXe3(); void ClickStopxe1(); void ClickStopxe2(); void ClickStopxe3(); void ClickChuyen(); void OnCommMscomm1(); void TinhEncoder(); }; // ControlPanel.cpp : #include "stdafx.h" #include "Xo.h" #include "ControlPanel.h" #include "math.h" #include "MainFrm.h" #include "Resource.h" #include "tchar.h" #include // CControlPanel IMPLEMENT_DYNCREATE(CControlPanel, CFormView) CControlPanel::CControlPanel() : CFormView(CControlPanel::IDD) , m_rx1(0), m_rx2(0), m_ry1(0), m_ry2(0), m_rz1(0), m_rz2(0), m_x1(1000), m_x2(1000), m_y1(1300), m_y2(700), m_z1(0), m_z2(0), m_rx3(0), m_ry3(0), m_rz3(0), m_x3(1000), m_y3(100), m_z3(0), SVID(0), m_ViTriCanVL(_T("")), m_ViTriLayVL(_T("")), m_vtx11(_T("")), 80 Luận văn thạc sĩ m_vtx12(_T("")), m_vtx21(_T("")), m_vtx22(_T("")), m_vtx31(_T("")), m_vtx32(_T("")), m_demchovl(0), m_test(_T("")) { t[1] = 1500; t[2] = 900; t[3] = 300; t[4] = 0; t[5] = 0, t[6] = 0; t[7] = 0; t[8] = 0; t[9] = 0; t[10] = 0; for (i = 1; i < 4; i++){ m_xv[i] = 2000; m_yv[i] = -2000; m_zv[i] = 0; TrangThai[i] = 0;} runbangtai1[1] = 1; runbangtai1[2] = 1; runbangtai1[3] = 1; stopbangtai1[1] = 1; stopbangtai1[2] = 1; stopbangtai1[3] = 1; runbangtai2[1] = 1; runbangtai2[2] = 1; runbangtai2[3] = 1; stopbangtai2[1] = 1; stopbangtai2[2] = 1; stopbangtai2[3] = 1; for (i = 1; i < 55; i++){ StartTimer[i] = 0; Stoptimer[i] = 0;} VTX[1] = 2000; VTY[1] = -2000; VTX[2] = 2000; VTY[2] = -4000; VTX[3] = 2000; VTY[3] = -6000; VTX[4] = 2000; VTY[4] = -8000; VTX[5] = -2000; VTY[5] = -8000; VTX[6] = -2000; VTY[6] = -6000; VTX[7] = -2000; VTY[7] = -4000; VTX[8] = -2000; VTY[8] = -2000; dem = 0; OnCom = 0; k = 0; demvach = 0; for (i = 1; i < 31; i++){ temp[i] = 0; } for (int x = 1; x < 4; x++){ dung[x] = false; anstop[x] = false; chuyenvanlieu[x] = false; dungTemp[x] = 0; dung[x] = 0; dangchay[x] = 0;} } CControlPanel::~CControlPanel(){} void CControlPanel::DoDataExchange(CDataExcha nge* pDX){ CFormView::DoDataExchange(pDX); DDX_Text(pDX, IDC_RX2, m_rx2); DDX_Text(pDX, IDC_RY1, m_ry1); DDX_Text(pDX, IDC_RY2, m_ry2); DDX_Text(pDX, IDC_RZ1, m_rz1); DDX_Text(pDX, IDC_RZ2, m_rz2); DDX_Text(pDX, IDC_X1, m_x1); DDX_Text(pDX, IDC_X2, m_x2); DDX_Text(pDX, IDC_Y1, m_y1); DDX_Text(pDX, IDC_Y2, m_y2); DDX_Text(pDX, IDC_Z1, m_z1); DDX_Text(pDX, IDC_Z2, m_z2); DDX_Text(pDX, IDC_RX3, m_rx3); DDX_Text(pDX, IDC_RY3, m_ry3); DDX_Text(pDX, IDC_RZ3, m_rz3); DDX_Text(pDX, IDC_X3, m_x3); DDX_Text(pDX, IDC_Y3, m_y3); DDX_Text(pDX, IDC_Z3, m_z3); DDX_Control(pDX, IDC_MSCOMM, m_mscomm); Nguyễn Văn Xô DDX_Text(pDX, IDC_VITRICANVL, m_ViTriCanVL); DDX_Text(pDX, IDC_VITRILAYVL, m_ViTriLayVL); DDX_Text(pDX, IDC_RX1, m_rx1); DDX_Control(pDX, IDC_MSCOMM1, m_mscomm1); DDX_Text(pDX, IDC_VTXE11, m_vtx11); DDX_Text(pDX, IDC_VTXE12, m_vtx12); DDX_Text(pDX, IDC_VTXE21, m_vtx21); DDX_Text(pDX, IDC_VTXE22, m_vtx22); DDX_Text(pDX, IDC_VTXE31, m_vtx31); DDX_Text(pDX, IDC_VTXE32, m_vtx32); DDX_Text(pDX, IDC_DemChoVL, m_demchovl); DDX_Text(pDX, IDC_TEST, m_test); } BEGIN_MESSAGE_MAP(CControlPanel, CFormView) ON_WM_TIMER() END_MESSAGE_MAP() #ifdef _DEBUG void CControlPanel::AssertValid() const{ CFormView::AssertValid();} #ifndef _WIN32_WCE void CControlPanel::Dump(CDumpContext& dc) const{ CFormView::Dump(dc);} #endif #endif //_DEBUG void CControlPanel::Calculate(){ UpdateData(TRUE); double pi; pi = 3.14159265358979323846264433832795; m_x1 = m_x[1]; m_y1 = m_y[1]; m_z1 = m_z[1]; m_rx1 = m_rx[1]; m_ry1 = m_ry[1]; m_rz1 = m_rz[1]; m_x2 = m_x[2]; m_y2 = m_y[2]; m_z2 = m_z[2]; m_rx2 = m_rx[2]; m_ry2 = m_ry[2]; m_rz2 = m_rz[2]; m_x3 = m_x[3]; m_y3 = m_y[3]; m_z3 = m_z[3]; m _rx3 = m_rx[3]; m_ry3 = m_ry[3]; m_rz3 = m_rz[3]; m_xv1 = m_xv[1]; m_xv2 = m_xv[2]; m_xv3 = m_xv[3]; m_yv1 = m_yv[1]; m_yv2 = m_yv[2]; m_yv3 = m_yv[3]; m_zv1 = m_zv[1]; m_zv2 = m_zv[2]; m_zv3 = m_zv[3]; CString tempVT; tempVT.Format("%d", Vitri[1]); m_vtx11 = "Lay tu vi tri " + tempVT; tempVT.Format("%d", Vitri[4]); m_vtx12 = " chuyen sang vi tri " + tempVT; tempVT.Format("%d", Vitri[2]); m_vtx21 = "Lay tu vi tri " + tempVT; tempVT.Format("%d", Vitri[5]); m_vtx22 = " chuyen sang vi tri " + tempVT; tempVT.Format("%d", Vitri[3]); m_vtx31 = "Lay tu vi tri " + tempVT; tempVT.Format("%d", Vitri[6]); 81 Luận văn thạc sĩ m_vtx32 = " chuyen sang vi tri " + tempVT; if (OnCom == 1){ for (int a = 1; a < 4; a ++){ if (CarState[a] == 1) && dung[a] == && dungTemp [a]== && dangchay[a] == 0){ dangchay[a] = 1; OnCom = 0; if (Vitri[a] < 5){ VTX1[a] = 1000; } else{ VTX1[a] = -1000; } if (Vitri[a + 3] < 5){ VTX1[a + 3] = 1000; } else{VTX1[a + 3] = -1000;} StartTimer[a] = 1; Stoptimer[a] = 1; StartTimer[a + 3] = 1; Stoptimer[a + 3] = 1; StartTimer[a + 7] = 1; Stoptimer[a + 7] = 1; StartTimer[a + 20] = 1;Stoptimer[a + 20] = 1; StartTimer[a + 30] = 1;Stoptimer[a + 30] = 1; StartTimer[a + 40] = 1;Stoptimer[a + 40] = 1; } } } for (i = 1; i < 4; i++){ if (CarState[i] == 0){KillTimer(i);} if (CarState[i] == 1){ if (StartTimer[i] == 1){ SetTimer(i, 50, NULL); StartTimer[i] = 0;} if (m_y[i] == VTY[Vitri[i]] && m_x[i] == VTX1[i]){ if (Stoptimer[i] == 1){ KillTimer(i); Stoptimer[i] =0; } if (StartTimer[i + 3] == && runbangtai1[i] == 1) { chuyenvanlieu[i] = true; SetTimer(i + 3, 50, NULL); StartTimer[i + 3] = 0;} } if (t[i + 3] 500) { if (dung[i]) { dungTemp[i] = 0; transfer.Format("%d", dungTemp); CString itemp; itemp.Format("%d", i); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); dung[i] = false;} SetTimer(i, 50, NULL); TrangThai[i] = 0; Stoptimer[i + 40] = 1; } } else if (m_x[i] == m_x[j] && m_x[i] == -1000 && m_y[i] < m_y[j]) { if ((m_y[j] - m_y[i]) < 500) { KillTimer(i); if (!dung[i]) { dungTemp[i] = 1; transfer.Format("%d", dungTemp); CString itemp; itemp.Format("%d", i); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); dung[i] = true;} } if ((m_y[j] - m_y[i]) < 500 && CarState[i] == 1) {TrangThai[i] = 1; } if (TrangThai[i] == && (m_y[j] - m_y[i]) > 500) { if (dung[i]) { dungTemp[i] = 0; transfer.Format("%d", dungTemp); CString itemp; itemp.Format("%d", i); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); dung[i] = false; } 83 Luận văn thạc sĩ SetTimer(i, 50, NULL); TrangThai[i] = 0; Stoptimer[i + 40] = 1; } } } } for (i = 1; i < 4; i++){ if (t[i] Run(m_x[1], m_y[1], m_z[1], m_rx[1], m_ry[1], m_rz[1], m_x[2], m_y[2], m_z[2], m_rx[2], m_ry[2], m_rz[2], m_x[3], m_y[3], m_z[3], m_rx[3], m_ry[3], m_rz[3], m_xv[1], m_yv[1], m_zv[1], m_xv[2], m_yv[2], m_zv[2], m_xv[3], m_yv[3], m_zv[3]); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; case 7:t[7] = t[7] + 20; Calculate(); ((CMainFrame*)AfxGetMainWnd())>Run(m_x[1], m_y[1], m_z[1], m_rx[1], m_ry[1], m_rz[1], m_x[2], m_y[2], m_z[2], m_rx[2], m_ry[2], m_rz[2], m_x[3], m_y[3], m_z[3], m_rx[3], m_ry[3], m_rz[3], m_xv[1], m_yv[1], m_zv[1], m_xv[2], m_yv[2], m_zv[2], m_xv[3], m_yv[3], m_zv[3]); UpdateData(FALSE); InvalidateRect(NULL, FALSE); 84 Luận văn thạc sĩ break; case 8:t[8] = t[8] + 20; Calculate(); ((CMainFrame*)AfxGetMainWnd())>Run(m_x[1], m_y[1], m_z[1], m_rx[1], m_ry[1], m_rz[1], m_x[2], m_y[2], m_z[2], m_rx[2], m_ry[2], m_rz[2], m_x[3], m_y[3], m_z[3], m_rx[3], m_ry[3], m_rz[3], m_xv[1], m_yv[1], m_zv[1], m_xv[2], m_yv[2], m_zv[2], m_xv[3], m_yv[3], m_zv[3]); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; case 9:t[9] = t[9] + 20; Calculate(); ((CMainFrame*)AfxGetMainWnd())>Run(m_x[1], m_y[1], m_z[1], m_rx[1], m_ry[1], m_rz[1], m_x[2], m_y[2], m_z[2], m_rx[2], m_ry[2], m_rz[2], m_x[3], m_y[3], m_z[3], m_rx[3], m_ry[3], m_rz[3], m_xv[1], m_yv[1], m_zv[1], m_xv[2], m_yv[2], m_zv[2], m_xv[3], m_yv[3], m_zv[3]); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; case 10: t[10] = t[10] + 20; Calculate(); ((CMainFrame*)AfxGetMainWnd())>Run(m_x[1], m_y[1], m_z[1], m_rx[1], m_ry[1], m_rz[1], m_x[2], m_y[2], m_z[2], m_rx[2], m_ry[2], m_rz[2], m_x[3], m_y[3], m_z[3], m_rx[3], m_ry[3], m_rz[3], m_xv[1], m_yv[1], m_zv[1], m_xv[2], m_yv[2], m_zv[2], m_xv[3], m_yv[3], m_zv[3]); UpdateData(FALSE); InvalidateRect(NULL, FALSE); break; } CFormView::OnTimer(nIDEvent); } void CControlPanel::Setting(){ if (m_mscomm.GetPortOpen()) m_mscomm.SetPortOpen(false); m_mscomm.SetCommPort(6); m_mscomm.SetHandshaking(0); CString strBitRate = "57600"; CString strParity = "None"; CString strDataBit = "8"; CString strStopBit = "1"; CString strSetting; strSetting.Format("%s,%c,%s,%s", strBitRate, strParity[1], strDataBit, strStopBit); m_mscomm.SetSettings(strSetting); m_mscomm.SetRThreshold(1); m_mscomm.SetInputLen(32); m_mscomm.SetInBufferSize(1024); m_mscomm.SetInputMode(0); m_mscomm.SetOutBufferSize(1024); m_mscomm.SetPortOpen(true); Nguyễn Văn Xô if (m_mscomm1.GetPortOpen()) m_mscomm1.SetPortOpen(false); m_mscomm1.SetCommPort(5); m_mscomm1.SetHandshaking(0); m_mscomm1.SetSettings(strSetting); m_mscomm1.SetRThreshold(1); m_mscomm1.SetInputLen(32); m_mscomm1.SetInBufferSize(1024); m_mscomm1.SetInputMode(0); m_mscomm1.SetOutBufferSize(1024); m_mscomm1.SetPortOpen(true); } void CControlPanel::OnInitialUpdate(){ CFormView::OnInitialUpdate(); Setting();} void CControlPanel::OnOncommMscomm(){ UpdateData(); switch (m_mscomm.GetCommEvent()) { case 1: break; case 2: VARIANT data = m_mscomm.GetInput(); m_strNhan = (CString)data.bstrVal; m_test = m_strNhan; int n = m_strNhan.GetLength(); int n1 = m_strNhan.Find(','); int n2 = n - (n1 + 1); CString strSVID = m_strNhan.Left(n1); CString varstring = m_strNhan.Right(n2); SVID = atoi(strSVID); char *pEnd; double vardouble = strtod(varstring, &pEnd); int varint = atoi(varstring); int q = varstring.GetLength(); int q1 = varstring.Find('a'); int q2 = q - (q1 + 1); CString varstringleft = varstring.Left(q1); CString varstringright = varstring.Right(q2); int vartintleft = atoi(varstringleft); int varintright = atoi(varstringright); switch (SVID) { case 1001: CarState[varint] = 1; break; case 1002: Vitri[vartintleft] = varintright; break; case 1003: Vitri[vartintleft + 3] = varintright; OnCom = 1; SetTimer(varint, 50, NULL); break; case 1005: dem = varint; break; case 4005: RealEncoder = atol(varstring); 85 Luận văn thạc sĩ DeltaEncoder = RealEncoder PreviewEncoder; break; case 4006: gocHMC = vardouble; break; case 4007: demvach = varint; PreviewEncoder = RealEncoder; break; case 4008: switch (varint){ case 11: runbangtai1[2] = 1; break; case 12: stopbangtai1[2] = 1; break; case 21: runbangtai2[2] = 1; break; case 22: stopbangtai2[2] = 1; break; default: break; } case 4009: dungdistance = varint; if (dungdistance==1) { KillTimer(2); } else if(dungdistance==0){ SetTimer(2, 50, NULL); } break; default: break; } } UpdateData(FALSE); } BEGIN_EVENTSINK_MAP(CControlPanel, CFormView) ON_EVENT(CControlPanel, IDC_XE1, DISPID_CLICK, CControlPanel::ClickXe1, VTS_NONE) ON_EVENT(CControlPanel, IDC_XE2, DISPID_CLICK, CControlPanel::ClickXe2, VTS_NONE) ON_EVENT(CControlPanel, IDC_XE3, DISPID_CLICK, CControlPanel::ClickXe3, VTS_NONE) ON_EVENT(CControlPanel, IDC_MSCOMM, 1, CControlPanel::OnOncommMscomm, VTS_NONE) ON_EVENT(CControlPanel, IDC_STOPXE1, DISPID_CLICK, CControlPanel::ClickStopxe1, VTS_NONE) ON_EVENT(CControlPanel, IDC_STOPXE2, DISPID_CLICK, CControlPanel::ClickStopxe2, VTS_NONE) Nguyễn Văn Xô ON_EVENT(CControlPanel, IDC_STOPXE3, DISPID_CLICK, CControlPanel::ClickStopxe3, VTS_NONE) ON_EVENT(CControlPanel, IDC_CHUYEN, DISPID_CLICK, CControlPanel::ClickChuyen, VTS_NONE) ON_EVENT(CControlPanel, IDC_MSCOMM1, 1, CControlPanel::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() void CControlPanel::ClickXe1(){ UpdateData(TRUE); if (chuyenvanlieu[1] == false && dung[1] == false){ anstop[1] = false; SetTimer(1, 10, NULL); } } void CControlPanel::ClickXe2() { UpdateData(TRUE); if (chuyenvanlieu[2] == false && dung[2] == false){ anstop[2] = false; CString itemp; dungTemp[2] = 0; transfer.Format("%d", dungTemp[2]); itemp.Format("%d", 2); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); SetTimer(2, 10, NULL); } } void CControlPanel::ClickXe3() { UpdateData(TRUE); if (chuyenvanlieu[3] == false && dung[3] == false){ anstop[3] = false; SetTimer(3, 10, NULL); } } void CControlPanel::ClickStopxe1(){ UpdateData(TRUE); if (anstop[1]==false){ dungTemp[i] = 1; transfer.Format("%d", dungTemp); CString itemp; itemp.Format("%d", 1); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); anstop[1] = true;} KillTimer(1); } void CControlPanel::ClickStopxe2(){ UpdateData(TRUE); if (anstop[2] == false){ 86 Luận văn thạc sĩ dungTemp[i] = 1; transfer.Format("%d", dungTemp[i]); CString itemp; itemp.Format("%d", 2); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); anstop[2] = true;} KillTimer(2); } void CControlPanel::ClickStopxe3(){ UpdateData(TRUE); if (anstop[3] == false){ dungTemp[i] = 1; transfer.Format("%d", dungTemp); CString itemp; itemp.Format("%d", 3); m_transfer = "2004," + itemp + "a" + transfer + "\n"; m_mscomm.SetOutput((COleVariant)m_t ransfer); anstop[3] = true;} KillTimer(3); } void CControlPanel::ClickChuyen(){ UpdateData(TRUE); xacnhan = 1; CString xacnhan1, xacnhan2; xacnhan1 = m_ViTriLayVL.GetString(); m_transfer = "2001," + xacnhan1 + "\n"; m_mscomm.SetOutput((COleVariant)m_transf er); xacnhan2 = m_ViTriCanVL.GetString(); m_transfer = "2002," + xacnhan2 + "\n"; m_mscomm.SetOutput((COleVariant)m_transf er); UpdateData(FALSE);} void CControlPanel::OnCommMscomm1(){ UpdateData(); switch (m_mscomm1.GetCommEvent()){ case 1:break; case 2: VARIANT data = m_mscomm1.GetInput(); m_strNhan = (CString)data.bstrVal; m_test = m_strNhan; int n = m_strNhan.GetLength(); int n1 = m_strNhan.Find(','); int n2 = n - (n1 + 1); CString strSVID = m_strNhan.Left(n1); CString varstring = m_strNhan.Right(n2); SVID = atoi(strSVID); char *pEnd; double vardouble = strtod(varstring, &pEnd); int varint = atoi(varstring); int q = varstring.GetLength(); int q1 = varstring.Find('a'); int q2 = q - (q1 + 1); CString varstringleft = varstring.Left(q1); Nguyễn Văn Xô CString varstringright = varstring.Right(q2); int vartintleft = atoi(varstringleft); int varintright = atoi(varstringright); switch (SVID){ case 1001: CarState[varint] = 1; break; case 1002: Vitri[vartintleft] = varintright; break; case 1003: Vitri[vartintleft + 3] = varintright; OnCom = 1; SetTimer(varint, 50, NULL); break; case 1005: dem = varint; break; case 4005: Encoder = atol(varstring); break; case 4006: gocHMC = vardouble; break; case 4007: demvach = varint; break; case 4008: switch (varint){ case 11: runbangtai1[2] = 1; break; case 12: stopbangtai1[2] = 1; break; case 21: runbangtai2[2] = 1; break; case 22: stopbangtai2[2] = 1; break; default: break; } case 4009: dungdistance = varint; if (dungdistance == 1) { KillTimer(2); } else if (dungdistance == 0){ SetTimer(2, 50, NULL);} break; default: break; } } UpdateData(FALSE); } void CControlPanel::TinhEncoder(){ UpdateData(TRUE); switch (demvach){ 87 Luận văn thạc sĩ case 0:VachEncoder = 0;break; case 1:VachEncoder = 1000;break; case 2:VachEncoder = 2000;break; case 3:VachEncoder = 3000;break; case 4:VachEncoder = 4000;break; case 5:VachEncoder = 5000;break; case 6:VachEncoder = 6000;break; case 7:VachEncoder = 7000;break; case 8:VachEncoder = 8000;break; case 9:VachEncoder = 9000;break; case 10:VachEncoder = 10000;break; case 11:VachEncoder = 11000;break; case 12:VachEncoder = 12000;break; case 13:VachEncoder = 13000;break; case 14:VachEncoder = 14000;break; case 15:VachEncoder = 15000;break; Nguyễn Văn Xô case 16:VachEncoder = 16000;break; case 17:VachEncoder = 17000;break; case 18:VachEncoder = 18000;break; case 19:VachEncoder = 19000;break; case 20:VachEncoder = 20000;break; case 21:VachEncoder = 21000;break; case 22:VachEncoder = 22000;break; case 23:VachEncoder = 23000;break; case 24:VachEncoder = 24000;break; default:break; } Encoder = VachEncoder + DeltaEncoder; UpdateData(FALSE); } 88 ... Đề tài: Nghiên cứu thiết kế chế tạo robot cung cấp nguyên vật liệu tự động cho trạm sản xuất lắp ráp nhà máy công nghiệp Giảng viên hướng dẫn: TS Nguyễn Chí Hưng Tơi xin cam đoan nghiên cứu, thực... giả đề xuất nghiên cứu chế tạo robot vận chuyển vật liệu từ kho đến trạm lắp ráp vận chuyển từ trạm sang trạm khác Hình 2.1 Một số loại khay đựng linh kiện lắp ráp công nghiệp Trong nhà máy có... đích: Thiết kế robot vận chuyển nguyên vật liệu nhà máy xây dựng hệ thống điều khiển, theo dõi hoạt động robot Đối tượng nghiên cứu: Robot vận chuyển nguyên vật liệu Phạm vi nghiên cứu: Nghiên cứu

Ngày đăng: 27/02/2021, 23:13

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w