• Webdien.com - Cầu nối dân điện


    1. [HOT] - Webdien đang tuyển các vị trí quản lý cao cấp

      ntech.com.vn

  • Trang 1 của 2 12 CuốiCuối
    Kết quả 1 đến 10 của 15
    1. #1
      Tham gia
      20-04-2011
      Bài viết
      117
      Cảm ơn
      32
      Được cảm ơn 44 lần, trong 36 bài

      Mặc định Truyền thông RS485 dùng VĐK PIC

      Trương Khánh Mỹ - ĐHBK Đà Nẵng
      Yahoo: mytruong_automation@yahoo.com
      Email: mybkpro08d2@gmail.com

    2. #2
      Tham gia
      20-04-2011
      Bài viết
      117
      Cảm ơn
      32
      Được cảm ơn 44 lần, trong 36 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      sao không thấy ai quan tâm mảng này vậy, cái đề tài này chuối quá, thấy bên mikroC thì có code mẫu, còn bên CCS C thì không, mà mikroC thì mình không quen ngôn ngữ của nó :((
      Trương Khánh Mỹ - ĐHBK Đà Nẵng
      Yahoo: mytruong_automation@yahoo.com
      Email: mybkpro08d2@gmail.com

    3. #3
      Tham gia
      18-05-2010
      Địa chỉ
      Long Hải
      Bài viết
      1,565
      Cảm ơn
      226
      Được cảm ơn 906 lần, trong 605 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Trích dẫn Gửi bởi khanh my Xem bài viết
      sao không thấy ai quan tâm mảng này vậy, cái đề tài này chuối quá, thấy bên mikroC thì có code mẫu, còn bên CCS C thì không, mà mikroC thì mình không quen ngôn ngữ của nó :((
      Hãy tượng tượng nó như RS232 và xuất dữ liệu ra y chang như thế. nhưng RS485 phải có master và slave ( chỉ có 1 chủ và nhiều tớ). khi gửi dữ liệu thì nên đóng gói thành 1 khung và quy dịnh địa chỉ cho slave.
      VD: sensor 1 là 0x01, 2 là 0x02, 3 là 0x03 thì muốn đọc dữ liệu của sensor 1 thì gửi 1 khung ra bus
      VD: 0xAA,0x00, 0X01,giá trị,CS
      0XAA là header
      0x00 là gửi dữ liệu từ master đến slave
      0x01 là địa chỉ sensor 1
      giá trị là giá trị bạn muốn gửi, nếu không có giá trị thì có thể để là 0x00
      CS là checksum
      khi gửi dữ liệu ra bus 485 thì tất cả các slave đều nhận được. và slave sẽ check xem có đúng địa chỉ của nó không thì nó mới trả lời.
      VD: 0xAA,0x01, 0X01,0x32,CS
      0XAA là header
      0x01 là gửi dữ liệu từ slave đến master
      0x01 là địa chỉ sensor 1
      0x32 là giá trị sensor1
      CS là checksum
      Cao Văn Hưởng
      Email: vanhuongcao@gmail.com

    4. The Following 2 Users Say Thank You to caovanhuong For This Useful Post:


    5. #4
      Tham gia
      24-11-2009
      Địa chỉ
      HCM
      Bài viết
      20
      Cảm ơn
      3
      Được cảm ơn 14 lần, trong 10 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Có ai làm RS485 ngang hàng chưa, ko phải Master và Slave.

    6. #5
      Tham gia
      18-05-2010
      Địa chỉ
      Long Hải
      Bài viết
      1,565
      Cảm ơn
      226
      Được cảm ơn 906 lần, trong 605 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Trích dẫn Gửi bởi haiquang8811 Xem bài viết
      Có ai làm RS485 ngang hàng chưa, ko phải Master và Slave.
      ngang hàng thì biêt đâu mà xử lý. giả sử nó ngang hàng nhau thì trong cùng 1 thời điểm 2 thằng cùng gửi dữ liệu thì xảy ra vấn đề gì.
      Cao Văn Hưởng
      Email: vanhuongcao@gmail.com

    7. Những thành viên đã cảm ơn caovanhuong vì bài viết hữu ích:


    8. #6
      Tham gia
      20-04-2011
      Bài viết
      117
      Cảm ơn
      32
      Được cảm ơn 44 lần, trong 36 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Trích dẫn Gửi bởi caovanhuong Xem bài viết
      Hãy tượng tượng nó như RS232 và xuất dữ liệu ra y chang như thế. nhưng RS485 phải có master và slave ( chỉ có 1 chủ và nhiều tớ). khi gửi dữ liệu thì nên đóng gói thành 1 khung và quy dịnh địa chỉ cho slave.
      VD: sensor 1 là 0x01, 2 là 0x02, 3 là 0x03 thì muốn đọc dữ liệu của sensor 1 thì gửi 1 khung ra bus
      VD: 0xAA,0x00, 0X01,giá trị,CS
      0XAA là header
      0x00 là gửi dữ liệu từ master đến slave
      0x01 là địa chỉ sensor 1
      giá trị là giá trị bạn muốn gửi, nếu không có giá trị thì có thể để là 0x00
      CS là checksum
      khi gửi dữ liệu ra bus 485 thì tất cả các slave đều nhận được. và slave sẽ check xem có đúng địa chỉ của nó không thì nó mới trả lời.
      VD: 0xAA,0x01, 0X01,0x32,CS
      0XAA là header
      0x01 là gửi dữ liệu từ slave đến master
      0x01 là địa chỉ sensor 1
      0x32 là giá trị sensor1
      CS là checksum
      Anh Hương có code mẫu nào không, cho em tham khảo với, em củng thử mày mò mà chưa có code tham khảo, ví dụ như slave sẻ đọc và xử lý ADC từ LM35 rùi đưa dử liệu về master hiển thị LCD, anh giúp em với nhé
      Trương Khánh Mỹ - ĐHBK Đà Nẵng
      Yahoo: mytruong_automation@yahoo.com
      Email: mybkpro08d2@gmail.com

    9. #7
      Tham gia
      18-05-2010
      Địa chỉ
      Long Hải
      Bài viết
      1,565
      Cảm ơn
      226
      Được cảm ơn 906 lần, trong 605 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Trích dẫn Gửi bởi khanh my Xem bài viết
      Anh Hương có code mẫu nào không, cho em tham khảo với, em củng thử mày mò mà chưa có code tham khảo, ví dụ như slave sẻ đọc và xử lý ADC từ LM35 rùi đưa dử liệu về master hiển thị LCD, anh giúp em với nhé
      H không có code mẫu, và cũng không có thời gian viết code mẫu nên chỉ gợi ý giải pháp cho bạn thế thôi. cố gắng là là sẽ được.
      Cao Văn Hưởng
      Email: vanhuongcao@gmail.com

    10. #8
      Tham gia
      20-04-2011
      Bài viết
      117
      Cảm ơn
      32
      Được cảm ơn 44 lần, trong 36 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Trích dẫn Gửi bởi caovanhuong Xem bài viết
      H không có code mẫu, và cũng không có thời gian viết code mẫu nên chỉ gợi ý giải pháp cho bạn thế thôi. cố gắng là là sẽ được.
      Vâng, em đã làm được chương trình slave đo nhiệt độ rồi truyền lên master rồi, tuy nhiên em chỉ dùng uart đơn thuần, giờ em chuyển sang dùng 2 salve, em chưa định đc địa chỉ cho 2 slave nên khi truyền lên master nó không phân biệt được dử liệu nào của slave nào, anh có thể giúp em định địa chỉ cho 2 slave đc không
      Cảm ơn anh rất nhiều
      +++---o0o---+++
      đây là bài uart,
      master đo nhiệt độ, truyền xuống slave hiển thị
      slave đo nhiệt độ, gửi lên master hiển thị

      master code
      Code:
      #include <16f887.h>
      
      
      #device *=16 ADC=10
      #fuses hs,nowdt,noput,noprotect,nobrownout,nolvp,nocpd,nodebug
      #use delay(clock=20000000)
      #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
      #include <stdio.h>
      #include <lcd_lib_4bit.c>
      
      unsigned int8 doc, value,a;
      void doc_xuli_adc(void);
      void hienthi_lcd (void);
      void main()
      {
         
         delay_us(1000);
      
         delay_us(1000);
         set_tris_d(0x00);
      
         set_tris_c(0xff);   
         set_tris_a(0xff); 
         setup_adc_ports(san0);
         setup_adc(adc_clock_internal); 
         lcd_init();
         delay_ms(500);
      
      
         while(true)
         {
               doc_xuli_adc();
             
               putc(doc);
               value=getchar();
               hienthi_lcd ();
         }
      }
      void doc_xuli_adc () {
         set_adc_channel(0);
         delay_us(10);
         a=read_adc ();
         doc=((float)a*4.88)/10;
      }
      
      void hienthi_lcd (){
               lcd_putcmd(line_1);
               lcd_putchar("MASTER");
               lcd_putcmd(line_2);
               printf(lcd_putchar,"H0=%3u",value);
      
      }
      slave : code
      Code:
      #include <16f887.h>
      #device adc=10
      #fuses hs,nowdt,noput,noprotect,nobrownout,nolvp,nocpd,nodebug
      #use delay(clock=20000000)
      #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
      #include <stdio.h>
      #include <lcd_lib_4bit.c>
      
      unsigned int8 doc, value,a;
      void doc_xuli_adc(void);
      void khoi_tao (void);
      void hienthi_lcd (void);
      void khoitaouart()
      {
         setup_uart(9600);
      }
      
      void main()
      {
         
         delay_us(1000);
         set_tris_d(0x00);
      
         set_tris_c(0xff);   
         set_tris_a(0xff);  
         setup_adc_ports(san0);
         setup_adc(adc_clock_internal); 
         lcd_init();
         delay_ms(500);
      
         khoitaouart();
         while(true)
         {
               doc_xuli_adc();
               putc(doc);
               value=getchar();
               hienthi_lcd ();
      
         }
      }
      void doc_xuli_adc () {
         set_adc_channel(0);
         delay_us(10);
         a=read_adc ();
         doc=((float)a*4.88)/10;
      }
      
      void hienthi_lcd () {
               lcd_putcmd(line_1);
               lcd_putchar("SLAVE1");
               lcd_putcmd(line_2);
               printf(lcd_putchar,"H1=%3u",value);
      }
      Trương Khánh Mỹ - ĐHBK Đà Nẵng
      Yahoo: mytruong_automation@yahoo.com
      Email: mybkpro08d2@gmail.com

    11. #9
      Tham gia
      21-06-2009
      Bài viết
      310
      Cảm ơn
      110
      Được cảm ơn 262 lần, trong 124 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Bạn nên định nghĩa giao thức truyền thông trước.
      - Quy tắc mạng và truy cập mạng
      - Quy cách các gói tin

      Trong trường hợp của bạn, mình ví dụ 1 giao thức đơn giản :
      Mạng :
      - dạng bus
      - 1 master
      - n slave ( n max = ? )
      - Cơ chế truy cập mạng : master - slave
      Có vẻ bạn chưa hình dung, mình mô tả như sau
      .......trong mạng có 1 master và nhiều Slave. Các slave được đánh địa chỉ 1,2 ...
      .......Để trao đổi thông tin : master sẽ hỏi và slave trả lời. Chỉ có master có quyền hỏi. Mỗi câu hỏi sẽ gửi tới tất cả các slave. Slave kiểm tra địa chỉ trong câu hỏi đó, nếu đúng là mình thì sẽ trả lời.
      ........Để cập nhật dữ liệu thường xuyên, master sẽ định kì hỏi các slave : m giây 1 lần ( m phụ thuộc vào thời gian timeout định nghĩa , m> tổng thời gian cho 1 vòng hỏi tất cả các slave)

      Định nghĩa gói tin : bạn xem hướng dẫn của bạn caovanhuong.

      Ngoài ra, bạn nên sử dụng ngắt UART để làm.

      Cụ tỉ nữa thì thế này :

      Hỏi slave 1:
      Con master :
      lệnh : Ê, slave1, nhiệt độ, Hết
      ( trong đó : Ê : header, slave1 : địa chỉ con slave 1, nhiệt độ : mã lệnh, Hết : kết thúc lệnh )
      Tất cả các slave đều nhận được lệnh này. Sau đó mỗi con đều kiểm tra địa chỉ của lệnh. Chỉ có con slave 1 thấy trùng thì sẽ gửi lại trả lời :
      Ê, slav1 đây, 15độ, hết.

      Con master nhận được 1 câu trả lời, nó tìm xem trong câu đó phát hiện ra là thắng slave 1, và hiển thị ...

      Chú ý ở đây mỗi lệnh là 1 chuỗi kí tự, nên trước hết bạn phải xử lí truyền nhận 1 chuỗi kí tự ( nhận biết bắt đầu và kết thúc chuỗi ) cho tốt, sau đó thì mới lập trình giao thức, tức là phân tích cú pháp của chuỗi nhận được để phản ứng.

      Khi nào ngon thì bạn tìm hiểu thêm cái check sum nữa, nó là vấn đề độ tin cậy dữ liệu thôi

    12. Những thành viên đã cảm ơn aladanh2000 vì bài viết hữu ích:


    13. #10
      Tham gia
      20-04-2011
      Bài viết
      117
      Cảm ơn
      32
      Được cảm ơn 44 lần, trong 36 bài

      Mặc định Ðề: Truyền thông RS485 dùng VĐK PIC

      Trích dẫn Gửi bởi aladanh2000 Xem bài viết
      Bạn nên định nghĩa giao thức truyền thông trước.
      - Quy tắc mạng và truy cập mạng
      - Quy cách các gói tin

      Trong trường hợp của bạn, mình ví dụ 1 giao thức đơn giản :
      Mạng :
      - dạng bus
      - 1 master
      - n slave ( n max = ? )
      - Cơ chế truy cập mạng : master - slave
      Có vẻ bạn chưa hình dung, mình mô tả như sau
      .......trong mạng có 1 master và nhiều Slave. Các slave được đánh địa chỉ 1,2 ...
      .......Để trao đổi thông tin : master sẽ hỏi và slave trả lời. Chỉ có master có quyền hỏi. Mỗi câu hỏi sẽ gửi tới tất cả các slave. Slave kiểm tra địa chỉ trong câu hỏi đó, nếu đúng là mình thì sẽ trả lời.
      ........Để cập nhật dữ liệu thường xuyên, master sẽ định kì hỏi các slave : m giây 1 lần ( m phụ thuộc vào thời gian timeout định nghĩa , m> tổng thời gian cho 1 vòng hỏi tất cả các slave)

      Định nghĩa gói tin : bạn xem hướng dẫn của bạn caovanhuong.

      Ngoài ra, bạn nên sử dụng ngắt UART để làm.

      Cụ tỉ nữa thì thế này :

      Hỏi slave 1:
      Con master :
      lệnh : Ê, slave1, nhiệt độ, Hết
      ( trong đó : Ê : header, slave1 : địa chỉ con slave 1, nhiệt độ : mã lệnh, Hết : kết thúc lệnh )
      Tất cả các slave đều nhận được lệnh này. Sau đó mỗi con đều kiểm tra địa chỉ của lệnh. Chỉ có con slave 1 thấy trùng thì sẽ gửi lại trả lời :
      Ê, slav1 đây, 15độ, hết.

      Con master nhận được 1 câu trả lời, nó tìm xem trong câu đó phát hiện ra là thắng slave 1, và hiển thị ...

      Chú ý ở đây mỗi lệnh là 1 chuỗi kí tự, nên trước hết bạn phải xử lí truyền nhận 1 chuỗi kí tự ( nhận biết bắt đầu và kết thúc chuỗi ) cho tốt, sau đó thì mới lập trình giao thức, tức là phân tích cú pháp của chuỗi nhận được để phản ứng.

      Khi nào ngon thì bạn tìm hiểu thêm cái check sum nữa, nó là vấn đề độ tin cậy dữ liệu thôi
      Thực sự mà nói, thì em rất cần code mẫu, lúc đó mới hiểu đc nguyên lý của nó, em củng đã hình dung được rồi, tuy nhiên câu lệnh, cú pháp.... thì em chưa nắm rỏ, chẳng hạn như ngắt UART cái này có phải là INT_RDA là ngắt truyền thông hay dùng phải không anh, và cái cách mà master gửi thông điệp đi để hỏi các slave, anh có thể hướng dẫn thêm cho em được không
      Sửa lần cuối bởi khanh my; 22-03-2013 lúc 15:48.
      Trương Khánh Mỹ - ĐHBK Đà Nẵng
      Yahoo: mytruong_automation@yahoo.com
      Email: mybkpro08d2@gmail.com

    Trang 1 của 2 12 CuốiCuối

    Trả lời với tài khoản Facebook

    Các Chủ đề tương tự

    1. Trợ giúp - Kết nối chuẩn truyền thông rs232 với rs485 trên PLC s7-200
      Bởi pro0812 trong diễn đàn PLC
      Trả lời: 8
      Bài cuối: 20-07-2016, 15:30
    2. Trợ giúp - Truyền thông PLC Fuji qua RS485
      Bởi hienanhtk trong diễn đàn PLC
      Trả lời: 3
      Bài cuối: 11-10-2014, 14:44
    3. Cần bán - Cáp tín hiệu truyền thông công nghiệp RS485 Hosiwell
      Bởi huynh_chan_duy trong diễn đàn Điện nhẹ, PCCC, an ninh, chống sét
      Trả lời: 0
      Bài cuối: 04-08-2014, 14:28
    4. Trợ giúp - cổng truyền thông RS485
      Bởi hary7811 trong diễn đàn PLC
      Trả lời: 8
      Bài cuối: 18-12-2012, 11:25
    5. Mạng truyền thông RS485 giữa PLC và Biến tần 3G3MV
      Bởi huuquoc1989 trong diễn đàn PLC
      Trả lời: 1
      Bài cuối: 24-04-2011, 09:54
    Văn Võ Trạng Nguyên
    Hắc Hiệp Đại Chiến Thánh Bài 2
    Đặc Cảnh Diệt Ma
    Khử Ma Đạo Trưởng
    Cương Thi Diệt Tà
    Sự Hình Thành Của Đế Chế Mông Cổ
    NHỮNG KHOẢNH KHẮC ĐÁNG NHỚ CỦA GIẢI GOLF PHÚ MỸ HƯNG 2016