PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Nguyễn Thế Vinh - căn bản lập trình CCS (http://www.picvietnam.com/forum/showthread.php?t=841)

NTVinh 12-05-2006 09:48 AM

Thảo luận
 
Hôm nay, mình cũng chưa có ý định viết tiếp vấn đề đã nêu. Mà, muốn dừng lại để cùng trao đổi với ntc cái đã. OSI, bản thân nó là một mô hình qui chiếu cho việc phát triển các hệ thống. OSI nó không phải là một chuẩn truyền thông! Nó cũng chẳng qui định rằng hệ thống của bạn phải dùng lớp vật lý này kia, nó cũng chẳng bắt hệ thống của bạn phải xây dựng lớp liên kết dữ liệu như thế nào cả. Như vậy??? Không có lý do nào bảo rằng một hệ thống A, xây dựng truyền thông dựa trên mô hình OSI, lại có thể giao tiếp được với một hệ thống B cũng xây dựng truyền thông dựa theo mô hình qui chiếu. Tóm lại, OSI chỉ có nhiệm vụ làm cơ sở để đối chiếu hệ truyền thông đã có, cũng như làm cơ sở cho việc xây dựng một hệ thống mới.
Nguyen The Vinh.

ntc 12-05-2006 11:14 AM

Như vậy bản chất của OSI chỉ là một mô hình để đối chiếu thôi. Uh nhỉ. Khi phát triển một hệ thống mới, cũng như nghiên cứu các hệ thống trong thực tế, OSI được dùng làm cở sở để phân tích hệ thống, đúng không anh.

Khi xây dựng một hệ thống, ta sẽ dựa trên OSI để phân tích, rằng có những vấn đề gì cần quan tâm, có những mô hình nào cần xây dựng, có những công việc nào cần làm, dựa theo yêu cầu của từng lớp cụ thể, ví dụ như lựa chọn lớp vật lí phù hợp với hệ thống, chọn cơ chế mã hóa, cơ chế định địa chỉ, cơ chế sửa lỗi, cơ chế truy xuất đối với lớp vật lí và lớp liên kết dữ liệu, các lớp tiếp theo có thể liên quan đến các vấn đề như chọn cơ chế tạo tuyến, cơ chế đóng gói dữ liệu, vân vân và vân vân... Mỗi hệ thống trong thực tế sẽ có nhiều sự lựa chọn và cách xây dựng khác nhau, do đó không thể đảm bảo rằng hệ thống này có thể giao tiếp với hệ thống khác khi cùng xây dựng trên mô hình OSI.

Khi phân tích một hệ thống, các thao tác cũng tương tự: phân tích cấu trúc lớp vật lí, phân tích các cơ chế có liên quan dựa trên hệ tham chiếu OSI 7 lớp như vậy.

Em có thể hiểu được sơ lược các vấn đề anh Vinh muốn đề cập rồi. :D.

Mục đích các bài viết sẽ là xây dựng một mạng truyền thông ứng dụng trong công nghiệp với lớp vật lí được lựa chọn là RS485. Các công việc cần tiến hành sẽ là:

- Phân tích cấu trúc lớp vật lí RS485 để làm cơ sở cho việc xây dựng mạng truyền thông, đồng thời xác định một số cơ chế thích hợp về mã hóa và tốc độ truyền bit phù hợp cho lớp vật lí RS485 (các vấn đề liên quan đến lớp 1).

- Xây dựng một số cơ chế trong lớp 2 cho mạng, các công việc sẽ bao gồm: xây dựng cơ chế định địa chỉ các thiết bị trong mạng, xây dựng cơ chế sửa lỗi và kiểm tra lỗi truyền thông cho mạng, xây dựng cở chế điều khiển truy nhập BUS.

Còn thiếu chỗ nào nữa không anh??

Em sẽ tìm hiểu về RS485 để tham gia luồng này với anh. Mình làm tới nơi tới chốn dzụ này luôn nhá.

:D

NTVinh 17-05-2006 10:50 AM

Xây dựng lớp vật lý trên cơ sở chuẩn RS485
 
Bài viết này tiếp nối cho vấn đề mà tôi đang đề cập, xây dựng một mạng truyền thông công nghiệp, những bài viết trước tôi đã nói về một số các mào đầu: các ví dụ nhỏ cụ thể là các subroutine cũng như giải thuật về việc truyền data định dạng số thực trên cơ sở vi điều khiển PIC (tất nhiên rồi, PIC được lựa chọn vì bài viết này đang nằm trên http://www.picvietnam.com), một số điều vắn tắt về mô hình tham chiếu OSI. Hôm nay, chúng ta sẽ đề cập đến lớp vật lý trên cơ sở chuẩn RS485 một cách chi tiết hơn, tất nhiên, trong bài viết nho nhỏ này thì cũng thật khó để truyền tải được nhiều lắm những vấn đề.
- RS485 là chuẩn truyền thông do EIA đưa ra, có khả năng truyền thông đa điểm trên bus chung duy nhât.
- Cấu hình mạng thông dụng nhất là sử dụng 2 dây dẫn cho việc truyền thông data, trong trường hợp này thì, hệ thống chỉ làm việc trong chế độ truyền thông bán song công (half-duplex). Có thể nói thêm về cấu hình này là, đây là cấu hình mà cho phép ta xây dựng lớp Datalink mềm dẻo hơn (so với cấu hình sử dụng 4 dây dẫn, đề cập ngay sau đây). Một cấu hình mạng khác là sử dụng 4 dây dẫn cho việc truyền thông data, trong trường hợp này thì, hệ thống làm việc trong chế độ truyền thông song công (full-duplex).
- Số lượng thành viên tham gia trong mạng, có thể nói rằng đây chỉ là một con số mang tính thời sự, lên tới 128 thành viên.
- Các qui định về mặt điện học, hay nói cách khác là các thông số quan trọng về mặt điện học của RS485 (có lẽ tôi cũng chỉ muốn đề cập đến nó hơn là các qui định về mặt cơ học..., điều này các bạn có thể tham khảo thêm: ví dụ về giắc nối, vỏ bọc chống nhiều cho cáp truyền thông, loại cáp là cặp dây xoắn...): RS485 sử dụng tín hiệu áp chênh lệch đối xứng trên đôi dây dẫn. Các trở đầu cuối cần được cài vào tại đầu cuối của mạng, điều này sẽ tránh được (triệt tiêu được) các sóng phản hồi trên đường dây dẫn. (Các bạn có thể hiểu rõ hơn về vấn đề sóng tới, sóng phản hồi cũng như tác hại của nó trong lý thuyết đường dây dài). Có lẽ, đấy là các thông số quan trọng trực tiếp liên quan đến việc xây dựng mạng RS485 trên quan điểm của người thiết kế.
Tôi xin giới thiệu một số IC truyền thông RS485 tiêu biểu: 75176, IL485 (con này thì tuyệt cú mèo).
Nguyen The Vinh.

thancongbao 25-05-2006 10:23 PM

Chào Bạn Vinh !!! Tớ cũng khoái cái mảng này !!! Nhưng xem ra cậu vào không được hoan nghênh lắm !!! He he he
Mạng công nghiệp theo mình nghĩ thì không nên tự xây dựng.Trường hợp tự xây dựng chỉ nên dùng khi bạn muốn đào tạo một người nào đó về mạng thôi !!! Hoặc bạn làm một Project nhỏ với các bộ điều khiển của riêng bạn thôi .
Nếu bạn có thời gian thì chao đổi với mình
Thancongbao@gmail.com -> Rất vui vì bạn rất nhiệt tình chia sẻ !!!

thancongbao 25-05-2006 10:35 PM

Không thấy bác nhắc đến chuyện viết OPC hoặc Activex hay DLL thế !!!

thancongbao 25-05-2006 10:40 PM

Mình có một số góp ý
 
Trích:

Nguyên văn bởi NTVinh
Code:

#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

float temp[32];

void main (void)
{
int8 i;
for(i=0;i<32;i++)temp[i]=i;
while(1)
{
//Bây giờ ta truyền temp[0], temp[1],...,temp[i],...,temp[31] cho PC như sau.
for(i=0;i<128;i++) putc(*(&temp[0]+i));
}
}

Nguyen The Vinh.


thancongbao 25-05-2006 10:46 PM

Mình có một số góp ý !
 
putc(*(temp+i)); vì trong C temp là con trỏ của mảng.

*(temp+i)=getc();

hpecom 06-06-2006 10:36 AM

Trích:

Nguyên văn bởi NTVinh
Code:

#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //

int8 i;
float temp[32];

#int_rda
void serial_isr() {
*(&temp[0]+i)=getc();
i++;if(i==128)i=0;
}
void main() {
i=0;
do {
//...
} while (TRUE);
}

Nguyen The Vinh.

Xin anh giải thích:
_ Tại sao anh khai báo mảng 32 phần tử mà khi sử dụng lại dùng tới 128 phần tử?
_ Cú pháp &temp[0] có phải lấy địa chỉ của temp[0]?
_ Và *(&temp[0]+i) là giá trị trong ô nhớ có địa chỉ (&temp[0]+i).
_ Nếu khai báo biến và sử dụng biến như trên thì CCS sẽ xử lý như thế nào? vì trong trường hợp nào sẽ xảy ra lỗi?
Cảm ơn anh rất nhiều!
Mong anh.
hpecom.

hpecom 06-06-2006 10:43 AM

Trích:

Nguyên văn bởi NTVinh
Code:

#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //

int8 i;
float temp[32];

#int_rda
void serial_isr() {
*(&temp[0]+i)=getc();
i++;if(i==128)i=0;
}
void main() {
i=0;
do {
//...
} while (TRUE);
}

Nguyen The Vinh.

Mong anh chỉ bảo:
_ Nếu em muốn truyền một số thực từ máy tính xuống PIC qua RS232 thì có được không?
_ Nếu được mong anh cho em một ví dụ viết trên MS Comm của Visual Basic 6.0.
Cảm ơn anh!
Rất mong anh.
hpecom.

thancongbao 08-06-2006 09:20 AM

trang này hay phết !!!
 
http://www.modbus.pl/downloads.htm
Anh em dùng PIC load về nhé !!! Tham khảo được khối thứ !!!

hoangngoc 26-09-2006 09:19 PM

Giao tiếp máy tính dùng RS485
 
1 Attachment(s)
Em chuẩn bị làm ĐATN về mạng công nghiệp, tuy nhiên em chưa rõ lắm về cách thức chuyển đổi chuẩn RS232->RS485. Em có tham khảo 1 mạch giao tiếp máy tính dùng RS485 như sau, mong các anh giải thích giúp em chức năng của các IC cũng như hoạt động của mạch. Em rất cảm ơn

NTVinh 27-09-2006 10:11 AM

Mạch chuyển đổi RS232/RS485 của bạn có những đặc điểm như sau (mình cứ đọc mạch nguyên lí chỗ nào thì mình viết chỗ ấy nhé, nên có thể sắp xếp không được hay lắm):
* Chuyển đổi về mặt vật lí giữa hai chuẩn RS232 và chuẩn RS485.
* Theo như mạch nguyên lí thì mạng RS485 của em có thể có tới 64 thành viên tham gia, 32 thành viên nối với J7 và 32 thành viên nối với J3 (nếu MAX485 cho phép 32 thành viên, 32x2=64. Chú ý rằng bây giờ có những IC cho phép tới 64 thành viên tham gia trên mạng, và nếu dùng nó thay cho MAX485 thì mạng của bạn cho phép 128 thành viên trên bus). Các thành viên trên mạng sẽ tạo thành một mạng kiểu một Master, giao tiếp song công RS485 4 dây.
* Cách li về điện bởi các opto 6N137, H11AG1.
* Các IC U3 và U4 luôn ở trạng thái truyền vì các chân /R/E, DE luôn ở mức logic 1.
* Các IC U5 và U6 luôn ở trạng thái nhận vì các chân /R/E, DE luôn ở mức logic 0.
* Chương trình viết cho thiết bị mà nối với cổng P1 cần chú ý là ngoài việc thiết lập các vấn đề như tốc độ truyền thông, khung dữ liệu cho một byte... thì cần thiết lập các chân 7 (của jắc P1) lên mức logic 1, và chân 4 (của jắc P1) xuống mức logic 0.
Bình luận về mạch của bạn: nói chung là không hay lắm vì mạch quá phức tạp và chưa có bảo vệ. Bạn có thể thay phần cách li và MAX485 bởi IL485W, con này hay lắm. Nữa là phần bảo vệ, có thể lắp thêm cầu chì (100mA) cho bus RS485, các bảo vệ chống điện áp cao, chống sét...
...
Nguyễn Thế Vinh.

hoangngoc 27-09-2006 08:09 PM

Rất cám ơn anh Vinh đã trả lời sớm như vậy. Cho em hỏi 1 vài câu hỏi sau:

-Câu "nếu MAX485 cho phép 32 thành viên" có nghĩa là gì, Max 485 luôn cho phép 32 thành viên hay chỉ đối với mạch này?

-Ở mỗi đầu ra J7 và J3 chỉ có 4 dây, 2 truyền và 2 nhận, như vậy nối với 32 thành viên như thế nào?

-Tại sao phải cách ly về điện và hoạt động cách ly của 2 IC đó như thế nào?

-Em chưa từng biết con IL485, anh có thể cho em thông tin về nó, hoặc nếu có thể, anh cho em xin mạch giao tiếp máy tính dùng IL485 được không ạ?

Cảm ơn anh

(learning electronic, quite hard for a girl !!)

NTVinh 28-09-2006 09:48 AM

Q: Câu "nếu MAX485 cho phép 32 thành viên" có nghĩa là gì, Max 485 luôn cho phép 32 thành viên hay chỉ đối với mạch này?
A: Chính xác là MAX485 cho phép 32 thành viên rồi, hôm trước chưa đọc datasheet của nó nên anh mới nói là "nếu MAX485 cho phép 32 thành viên". Như vậy với khả năng như vậy thì toàn bộ mạch của em cho phép 32x2=64 thành viên tham gia (vì mạch của em có tới những hai bộ truyền, hai bộ nhận). Về vấn đề MAX485 cho phép tối đa chỉ có 32 thành viên tham gia trên bus vì lí do dòng điện.
Q:Ở mỗi đầu ra J7 và J3 chỉ có 4 dây, 2 truyền và 2 nhận, như vậy nối với 32 thành viên như thế nào?
A: Câu này trả lời qua mạng thì hơi khó, thôi thì em tham khảo một mạng RS485 kiểu 4 dây sau nhé, lắp như họ là được. http://www.maxim-ic.com/appnotes.cfm...te_number/2116.
Q: Tại sao phải cách ly về điện và hoạt động cách ly của 2 IC đó như thế nào?
A: Vấn đề cách ly về điện để đảm bảo an toàn cho các thành viên trên mạng, hihi, nó như kiểu mình đeo kính khi đi xe máy ý, vẫn nhìn thấy đường đi mà không sợ bị bụi. Hoạt động của hai IC cách ly? Nó liên quan đến vấn đề chuyển đổi Điện~~>Quang và Quang~~>Điện, em có thể tham khảo trong các quyển sách về Điện tử số.
Q: Em chưa từng biết con IL485, anh có thể cho em thông tin về nó, hoặc nếu có thể, anh cho em xin mạch giao tiếp máy tính dùng IL485 được không ạ?
A: Em vào trang này xem nhé, www.nve.com. Con IL485W nó có một số đặc điểm rất hay, ví dụ như tốc độ truyền cao, cách li, tương thích Profibus...
Nguyễn Thế Vinh.

ntc 28-09-2006 08:39 PM

Trích:

-Câu "nếu MAX485 cho phép 32 thành viên" có nghĩa là gì, Max 485 luôn cho phép 32 thành viên hay chỉ đối với mạch này?
Chính xác hơn, là đường truyền RS485 cho phép 32 UL (Unit Load,tạm dịch là đơn vị tải) được gắn vào đường truyền tín hiệu. Các đặc tính của một UL bạn có thể search trên google để nắm thêm.

Việc qui định các đặc tính của một đơn vị tải cho phép người thiết kế linh động hơn trong việc quyết định cho phép gắn bao nhiêu thiết bị trên một đường truyền. Bởi vì các đặc tính tải của các thiết bị trong thực tế rất đa dạng.

Ví dụ, một thiết bị có các đặc tính tải đáp ứng đúng với các yêu cầu của một UL, thì có thể gắn được 32 thiết bị như vậy trên đường truyền. Các chip như MAX485, 75176 được thiết kế để phù hợp với các đặc tính của một đơn vị tải, nên có thể gắn được 32 bộ chuyển đổi như vậy.

Trong một trường hợp khác, một thiết bị có khả năng đáp ứng tốt hơn các yêu cầu của một UL (1/2 UL, 1/4 UL, 1/8 UL, ...), thì cho phép gắn nhiều thiết bị hơn trên đường truyền. Ví dụ như thiết bị có đặc tính tải bằng 1/2 UL thì có thể gắn được 64 thiết bị như vậy, ...

Cái khái niệm UL hơi khó hiểu, bạn cử tìm hiểu thêm rồi mình cùng trao đổi.


Múi giờ GMT. Hiện tại là 07:26 PM.

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