PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp cổng COM và LPT (http://www.picvietnam.com/forum/forumdisplay.php?f=44)
-   -   [Need Help] Modbus + RS485 (http://www.picvietnam.com/forum/showthread.php?t=31986)

doantoansai 20-03-2013 12:25 AM

[Need Help] Modbus + RS485
 
1 Attachment(s)
Đồ án môn học hiện tại của em đang làm về mạng rs485 sử dụng giao thức modbus, master + slave là PIC hết. Em có tham khảo trong example của CCS nhưng càng đọc càng thấy bế tắc. Cơ bản nó có các hàm truyền nhận như này

Code:

read_all_coils();
  read_all_inputs();
  read_all_holding();
  read_all_input_reg();
  write_coils();
  write_regs();
  write_coil();
  write_reg();
  read_all_coils();
  read_all_holding();

Em không rõ bản chất của những hàm này là như nào? Đọc tất cả đầu vào, đọc cuộn dây???

Cơ bản em chỉ cần master truyền dữ liệu xuống các slave, đọc các dữ liệu từ các slave. Bác nào đã từng kinh qua con modbus này vào giải đáp hộ em với ạ
Bình thường mọi người hay làm mạng RS485 bằng gì vậy? Ai đã từng làm rồi chia sẻ kinh nghiệm. Em xin trân thành cảm ơn và "hậu tạ" luôn.

Project em làm theo mẫu của ccs đính kèm dưới.

Delfy_Coltech 26-03-2013 03:50 PM

Một vài chia sẻ...
 
Hi bạn,
Đoạn code bạn đưa lên chỉ là các hàm chức năng tự định nghĩa được gọi ra trong chương trình.
Cái đó nó không có ý nghĩa gì ở đây cả!
Mình có một vài lời khuyên để bạn có thể hoàn thành đồ án môn học của bạn một cách nhanh nhất và hiểu rõ bản chất của nó nhất!
Thứ nhất, bạn đã hiểu rõ về giao tiếp RS485 chưa? Khoảng cách truyền xa tín hiệu được bao nhiêu m? số agent kết nối vào mạng maximum là bao nhiêu con?
Thứ hai, mạch truyền thông cho giao thức này như thế nào? Post schematic của bạn lên đây.
--> Cách truyền dữ liệu có điểm gì khác so với dùng RS232?
Thứ ba, khi hiểu rõ 2 điều trên rồi thì ta mới bàn đến giao thức truyền dữ liệu. Modbus cũng chỉ là một giao thức thôi mà! Hiểu rõ nó rồi thì làm sẽ không khó!

Bạn trả lời giúp mình mấy câu hỏi trên nhé!

BRs,
Delfy.

doantoansai 27-03-2013 05:34 PM

Trích:

Nguyên văn bởi Delfy_Coltech (Post 81251)
Hi bạn,
Đoạn code bạn đưa lên chỉ là các hàm chức năng tự định nghĩa được gọi ra trong chương trình.
Cái đó nó không có ý nghĩa gì ở đây cả!
Mình có một vài lời khuyên để bạn có thể hoàn thành đồ án môn học của bạn một cách nhanh nhất và hiểu rõ bản chất của nó nhất!
Thứ nhất, bạn đã hiểu rõ về giao tiếp RS485 chưa? Khoảng cách truyền xa tín hiệu được bao nhiêu m? số agent kết nối vào mạng maximum là bao nhiêu con?
Thứ hai, mạch truyền thông cho giao thức này như thế nào? Post schematic của bạn lên đây.
--> Cách truyền dữ liệu có điểm gì khác so với dùng RS232?
Thứ ba, khi hiểu rõ 2 điều trên rồi thì ta mới bàn đến giao thức truyền dữ liệu. Modbus cũng chỉ là một giao thức thôi mà! Hiểu rõ nó rồi thì làm sẽ không khó!

Bạn trả lời giúp mình mấy câu hỏi trên nhé!

BRs,
Delfy.

Cảm ơn anh đã quan tâm, em có tìm hiểu về rs485 mức cơ bản và được biết như sau

1. RS485 là chuẩn truyền thông vật lý dựa vào sự chênh lệch điện áp giữa 2 dây tín hiệu để xác định mức 0 và 1, trường hợp sụt áp thì cả 2 dây đều bị sụt nên độ chính xác của tín hiệu không suy hao nhiều. Khoảng cách truyền có thể lên đến 1km, số agent tối đa của mạng là 128. Các slave sẽ được đánh địa chỉ, khi master truyền tín hiệu, các slave lắng nghe nếu đúng địa chỉ của mình thì mới thực hiện công việc tiếp theo, không phải địa chỉ của mình thì không làm gì cả. Sau khi nhận được gói tin thì slave phải hồi đáp lại Master trong 1 khoảng time nhất định, nếu không sẽ bị tính timeout.

2. Vì đồ án của em là đồ án môn học nên chỉ dừng ở khoảng 5-6 slave, sử dụng IC max485 nối vào chân RC6 RC7, 2 chân RE OE nối chung vào 1 pin để điều khiển việc truyền nhận.
RS485 là mạng đa điểm còn RS232 chỉ kết nối 2 thiết bị với nhau, khoảng cách truyền gần, phân biệt mức 0 1 bằng cách so sánh điện áp 2 dây tín hiệu với GND.

Giaos viên hướng dẫn gợi ý tìm hiểu về modbus, em có tìm trong example của CCS ( C:\Program Files\PICC\Examples ) đấu nối đúng như tệp đính kèm nhưng đang vướng mắc là: chúng ta cần thao tác với các cổng vào ra của PIC nhưng trong ví dụ nó không hề động đến các cổng này, vậy thì làm sao điều khiển thiết bị được.

Em cũng đã nghĩ đến phần tự xây dựng giao thức, cơ chế tương tự như modbus (tất nhiên là không hoàn thiện bằng), nhưng lần đầu tiên làm về mảng truyền thông nên bỡ ngỡ. Cảm ơn anh và mọi người đã quan tâm và giúp đỡ.
Mong hồi âm

Delfy_Coltech 06-04-2013 12:59 AM

Hi bạn,
Xin lỗi vì bận cv nên giờ mới hồi đáp cho bạn đươc!
Về RS485 bạn hiễu như thế là tạm ổn. Chú ý số Agent tối đa ko phải 128 đâu nhé!
Về giao thức truyền thông ta chưa bàn đến vội, bạn thiết kế và làm mạch phần cứng đi đã nhé! Rồi code cho giao tiếp 485 đơn giản sau đó code cho đồ án môn của ban!


Múi giờ GMT. Hiện tại là 11:02 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam