liệu về máy tính PC: nội dung dữ liệu được kit vi xử lý thu thập từ các đối tượng điều khiển bên ngoài ví dụ như giá trị diện áp, xung điều khiển hoặc các giá trị đo được từ cảm biến v.v
Trang 1Chương 5:
CHƯƠNG TRÌNH
PHẦN 1: TẬP LỆNH
I GIỚI THIỆU TẬP LỆNH :
Việc thu thập dữ liệu và điều khiển từ xa là một vấn đề đáng được quan tâm trong lĩnh vực điều khiển tự động Tuy nhiên, thật phiền hà nếu như không có một sự thống nhất chung về câu lệnh trong quá trình trao đổi thông tin Vì thế, một phần nội dung chính của đề tài là xây dựng được một tập lệnh trong giao tiếp dữ liệu giữa máy tính với vi xử lý và sử dụng được nó Việc xây dựng tập lệnh giao tiếp RS-232 này được xem như một mong muốn tạo ra một câu lệnh chung trong giao tiếp dữ liệu giữa máy tính và vi xử lý về mặt ngôn ngữ
Đây là một phương tiện giao tiếp giữa máy tính và vi xử lý, nhằm giúp cho người sử dụng không phải mất nhiều thời gian lập trình lại từ đầu mỗi khi muốn thực hiện vấn đề giao tiếp mà việc trao đổi thông tin vẫn có thể xảy ra dễ dàng thông qua việc sử dụng tập lệnh này
Tập lệnh được xây dựng bao gồm các lệnh xuất nhập đầy đủ các dạng tín hiệu như: tín hiệu dạng mức, tín hiệu dạng xung, tín hiệu dạng analog/digital giúp việc trao đổi thông tin không bị giới hạn và đối tượng điều khiển (từ kit vi xử lý) cũng được phong phú hơn Ngoài ra, tập lệnh còn có một số lệnh điều khiển và quan sát quá trình hoạt động của hệ thống như: biến cài đặt dạng sóng ngõ ra (Kx), counter (Cx), dữ liệu (Dx), biến trạng thái xác lập chế độ hoạt động từ PC hay từ KIT (Sx) và biến thực thi hiển thị chế độ hoạt động RUN/STOP (Mx) giúp cho quá trình hoạt động của hệ thống diễn ra một cách chặt chẽ, dễ quan sát và dễ quản lý hơn
II NỘI DUNG TẬP LỆNH:
Các lệnh được xây dựng trong tập lệnh giao tiếp RS-232 này nhìn chung chỉ bao gồm các lệnh giao tiếp dữ liệu là xuất và nhập Đối với các lệnh gởi dữ
Trang 2liệu về máy tính (PC): nội dung dữ liệu được kit vi xử lý thu thập từ các đối
tượng điều khiển bên ngoài ví dụ như giá trị diện áp, xung điều khiển hoặc các
giá trị đo được từ cảm biến v.v… và đưa vào các vùng địa chỉ định sẵn tùy thuộc
vào dạng của tín hiệu thu vào (dạng mức, xung hay A/D) và gởi đến PC mỗi khi
có yêu cầu Đối với các lệnh gởi dữ liệu từ PC đến vi xử lý: nội dung dữ liệu
nhận về từ PC, ví dụ như các thông số điều khiển được cài đặt sẵn, cũng được
đưa vào các vùng địa chỉ riêng ứng với các dạng dữ liệu nhận vào Các giá trị dữ
liệu này có thể được dùng để điều khiển các đối tượng bên ngoài khác tùy thuộc
vào ứng dụng cụ thể của chương trình Các lệnh không mang dữ liệu được PC
gởi đến vi xử lý là các lệnh yêu cầu vi xử lý gởi dữ liệu, các lệnh không mang
dữ liệu từ vi xử lý gởi về PC là các lệnh trả lời đã nhận được nội dung PC vừa
gởi vì vi xử lý không có chức năng yêu cầu dữ liệu
1 Bảng mô tả các vùng địa chỉ của board VXL:
Stt Vùng địa
1 I0-I1 2x2 2 byte dạng ASCII Input mức-16 ngõ vào(bit)
2 N0-N1 2x5 5 byte dạng ASCII Input xung-2 ngõ vào(99.999Hz
max)
3 Q0-Q1 2x5 5 byte dạng ASCII Ngõ vào A/D – 2 ngõ vào
(99.999max)
4 U0-U1 2x5 5 byte dạng ASCII Ngõ vào A/D - 2 ngõ vào
(±4.999max)
5 O0-O1 2x2 2 byte dạng ASCII Output mức-16 ngõ ra(bit)
6 P0-P1 2x5 5 byte dạng ASCII Output xung-2 ngõ ra (99.99Hz
max)
7 A0-A1 2x5 5 byte dạng ASCII Ngõ ra D/A-2 ngỏ ra
(99.999max)
8 K0-K7 8x2 2 byte dạng ASCII Biến cài đặt
10 D0-D7 8x2 2 byte dạng ASCII Dữ liệu
11 S0-S7 8x1 1 byte dạng ASCII Biến trạng thái
12 M0-M7 8x1 1 byte dạng ASCII Biến thực thi
Trang 32 Bảng mô tả các lệnh chuẩn:
Stt Lệnh từ PC Phản hồi từ VXL Mô tả(cho PC)
Ix↵
I0’B’I1’B’↵
Ix’B’↵
Đọc ngõ vào các Digital input x=0hay1(dạng ASCII)
Nx↵
N0’BBBBB’N1’BBBBB’↵
Nx’BBBBB’↵
Đọc ngõ vào các puls Input x=0hay1(dạng ASCII)
Qx↵
Q0’BBBBB’Q1’BBBBB’↵
Qx’BBBBB’↵
Đọc ngõ vào các A/D Input (đơn cực) x=0 hay 1 (dạngASCII)
Ux↵
U0’BBBBB’U1’BBBBB’↵
Ux’BBBBB’↵
Đọc ngõ vào các A/D Input (lưỡng cực) x=0 hay 1 (dạngASCII)
x=0 hay 1 (dạng ASCII)
(dạng ASCII)
(dạng ASCII)
7 (dạng ASCII)
đến 7 (dạng ASCII)
ASCII)
đến 7 (dạng ASCII)
12 Mx’B’↵ Mx↵ Xuất ngõ ra biến thực thi.x=0
đến 7 (dạng ASCII)
Ghi chú: ’BBBBB’: số byte dữ liệu của các vùng địa chỉ luôn được gọi ở dạng ASCII ; x là chỉ số đi kèm theo các ký tự chỉ vùng địa chỉ nhằm mở rộng các vùng địa chỉ có cùng chức năng.
Trang 4PHẦN 2: MÔ TẢ CHƯƠNG TRÌNH
LƯU ĐỒ CHƯƠNG TRÌNH TỔNG
QUÁT
1: Dữ liệu nhận về từ PC
2: Dữ liệu gởi đến PC
3: Kết quả xử lý
4: Yêu cầu xử lý
Khối giao tiếp RS-232:
- Nhận chuỗi từ PC
- Kiểm tra.
- Đóng gói dữ liệu (truyền)
- Truyền dữ liệu đã đóng gói đến PC
Buffer user
Giao tiếp RS-232
Chương trình xử lý dữ liệu
1
4
Trang 5 Khối buffer user:
Đây là vùng đệm cho các chương trình ứng dụng Khối này thực hiện lưu trữ và truy xuất dữ liệu từ các vùng dữ liệu quy định trong tập lệnh Các chương trình thực hiện trong khối này là:
- Ghi giá trị A/D vào vùng địa chỉ Q0.
- Ghi trạng thái hoạt động từ Kit hay PC đọc từ ngõ vào input 1 đưa vào ô nhớ S0.
- Chế độ Run/Stop nhận từ PC đưa vào ô nhớ địa chỉ M0.
- Các ngõ vào input 2,3,4 cài đặt dạng sóng ra đưa vào vùng nhớ địa chỉ K0.
- Trị đỉnh của dạng sóng ra đưa vào ô nhớ dữ liệu địa chỉ D0.
Khối chương trình xử lý dữ liệu:
Khối này thực hiện các chương trình ứng dụng cho hệ thống Tùy các yêu cầu cụ thể đặt ra mà nó thực hiện nhiều hay ít chức năng Sơ đồ khối tổng quát cho nhóm chương trình trtong ứng dụng này là:
Hiển thị
Chương trình xử lý
Tạo dạng sóng ra Đọc A/D
Xuất D/A
Đọc input Xuất output Buffer
user
Trang 6Bước đầu trong giao tiếp dữ liệu giữa máy tính và vi xử lý được thực hiện bởiø việc gởi chuỗi dữ liệu từ máy tính Do đó, kit vi xử lý chỉ thực hiện và trả lời theo yêu cầu của máy tính gởi đến.
CHƯƠNG TRÌNH NHẬN CHUỖI TỪ PC:
Như đã giới thiệu ở chương Protocol, frame dữ liệu gởi đi luôn được bắt đầu bởi một byte header cho cả hai hướng truyền (từ PC và vi xử lý)
Vì thế, để tránh mất thời gian nếu phải nhận vào cả chuỗi mà ngay ở byte đầu tiên đã không đúng, nên trước tiên ta chỉ nhận về và kiểm tra byte header Việc nhận dữ liệu chỉ được tiếp tục thực hiện khi byte header là đúng Ngoài ra cũng có một số ràng buộc kèm theo cho quá trình nhận chuỗi, là ở lần nhận sau phải đảm bảo rằng dữ liệu nhận vào lần trước đó đã được kiểm tra và xử lý Điều kiện này đặt ra nhằm mục đích bảo toàn các giá trị nhận về từ PC, vì nếu việc nhận dữ liệu vào cứ diễn ra liên tục mà quá trình kiểm tra và xử lý không đáp ứng kịp, thì sẽ xảy ra trường hợp dữ liệu ở lần nhận sau sẽ đè lên dữ liệu nhận về trước đó Như vậy, quá trình thực hiện sẽ bỏ sót một vài trường hợp xử lý tức hệ thống hoạt động không tối ưu Điều này chỉ thật sự cần thiết đối với hệ thống thực hiện theo hệ thời gian thực (multitasking) vì các công việc trong chương trình được thực hiện song song nhau.
Trang 7Max=chiều dài tối đa của chuỗi cho phép nhập vào
Kiểm tra byte Header
Kiểm tra vùng đệm thu có dữ liệu không
Cờ nhận=0 ?
Nhận vào 4 byte đầu của chuỗi x[i]
N=x[3]+4 (chiều dài củachuỗi dữ liệu+
4byte header&control fiels) N<=max?
i=0n Nhận chuỗi x[i] vào vùng
đệm thu
i=0max Nhận chuỗi x[i] vào vùng
đệm thu
END
Không có
Sai
Đúng
N
Y
Chương trình nhận chuỗi từ PC
Trang 8CHƯƠNG TRÌNH KIỂM TRA:
Việc kiểm tra chuỗi dữ liệu nhận về chủ yếu là kiểm tra cấu trúc frame có phù hợp với định nghĩa không, và chuyển các giá trị dữ liệu nhận vào đến vùng địa chỉ khác, đồng thời cho phép hệ thống tiếp tục nhận dữ liệu vào nếu có Tác vụ này được thực hiện mỗi khi có chuỗi mới được nhận vào
Cothu=1?
(hoàn tất công việc nhận chuỗi?)
Bit b0=bit thấp nhất của byte bufin[2]
Bit b0=0?
(chuỗi nhận vào có dữ liệu?)
Số byte dữ liệu (bufin[3])>1?
Kết quả nhận đúng Kết quả nhậnsai
Số byte dữ liệu (bufin[3])>1?
Cothu=0(được phép nhận chuỗi mới)
RET
Chuỗi buffer[]=chuỗi bufin[]
Y Y
Y
Y
N
N
N N
Trang 9CHƯƠNG TRÌNH XỬ LÝ TẬP LỆNH:
Chương trình xử lý tập lệnh bước đầu thực hiện việc kiểm tra một số byte control fiels được nhận về từ PC nhằm tránh sự trùng lặp trong quá trình xử lý Vì theo giao thức truyền thông đặt ra (protocol), nếu trong khoảng thời gian và số lần nhắc lại qui định, kể từ sau khi PC gởi một yêu cầu đến máy tính, mà PC vẫn không nhận được kết quả phản hồi theo mong muốn ( lỗi này có thể xảy ra khi kit vi xử lý không nhận đầy đủ dữ liệu gởi đến từ PC, có thể do các byte control fiel không được xác lập đúng qui định … ) hoặc kết quả nhận về từ khối vi xử lý báo lỗi thì nó gởi lại frame truyền mới, mà frame gởi lại này mang đầy đủ thông tin vừa rồi cho khối vi xử lý (xem chi tiết trong phần protocol) Tuy nhiên, không phải bất cứ khi nào PC không nhận được frame truyền mang theo thông tin trả lời từ vi xử lý đều xem là lỗi mà có thể do gặp sự cố về vấn đề thời gian Trong trường hợp đó, chương trình không xử lý lại từ đầu mà tiếp tục công việc xử lý cũ Nên bước kiểm tra này giải đáp cho câu hỏi khối
vi xử lý có nhận được và có xử lý yêu cầu vừa rồi không?
Tiếp theo quá trình kiểm tra, việc xử lý tập lệnh sẽ thực hiện dựa trên các kết quả của quá trình xử lý theo chức năng cụ thể cho từng hệ thống được đưa vào các vùng nhớ và sử dụng các lệnh được xây dựng trong tập lệnh.
Trang 10Lưu đồ: chương trình
xử lý ứng dụng tập
lệnh
Bit b1=buffer[2]&0x02
Frame gởi lần đầu (b1=0)?
buffer[4] ≠ địachỉ[0]?
Và buffer[5] ≠ địachỉ[1]?
Địachỉ[0]=buffer[4]
Địachỉ[1]=buffer[5]
Gọi tập lệnh
Cờ xử lý =1 (xử lý xong)
Y Y
N
N
Kết quả nhận đúng ?
Y
Frame nhận vào có dữ liệu ?
Y
N START
Trang 11CHƯƠNG TRÌNH ĐÓNG GÓI DỮ LIỆU:
Chương trình đóng gói dữ liệu là tạo ra một frame truyền trả về cho PC mỗi khi nhận yêu cầu gởi đến từ nó Frame này cũng tuân theo qui định của các byte control fiel, và có thông báo kết quả của lần nhận vừa rồi Đối với frame gởi về từ vi xử lý, mã
ID là mã của frame nhận từ PC Ngoài ra, việc đóng gói dữ liệu còn nhằm mục đích là đảm bảo trong quá trình gởi 1 khung dữ liệu từ Kit về PC nếu có sự gián đoạn nào xảy ra (1 chương trình interrupt chẳng hạn ) thì sự thay đổi giá trị của một biến bất kỳ cũng không gây ảnh hưởng đến dữ liệu truyền, tuy trường hợp này chỉ xảy ra với xác suất thấp vì tốc độ truyền dữ liệu rất cao nhưng nó cũng là một khuyết điểm đáng chú ý của chương trình nếu không được quan tâm đến
Quá trình đóng gói dữ liệu và trả lời cho PC không phụ thuộc vào chương trình xử lý về mặt thời gian Nó được thực hiện sau khi hoàn tất chương trình kiểm tra frame nhận vào, kết quả của quá trình xử lý sẽ quyết định nội dung gởi về cho PC, số byte dữ liệu là không nếu chương trình xử lý vẫn đang thực hiện tại thời điểm đóng gói
Trang 12Bufout[0]=header Bufout[1]=bufin[1]
Khởi tạo bufout[2]=0x80
Kết quả nhận đúng?
Bit b2=0 (bufout[2]= b2b1b0)
Xử lý xong?
Bit b0=0
Bufout[3]=chiều dài chuỗi dữliệu
Bufout[i+4]=dulieu[i]
Gởi chuỗi bufout
Bit b2=1 (bufout[2]= b2b1b0)
Bufout[3]=0(chiều dài chuỗi dữliệu=0)
Bit b0=0
Bufout[3]=0(chiều dài
chuỗi dữliệu=0)
Y Y
N N
Trang 13CHƯƠNG TRÌNH DEMO-KIT:
Chương trình xử lý cho ứng dụng Demo-kit luôn phải cập nhật ngõ vào input 1 từ switch để biết chế độ hoạt động của hệ thống là Kit hay
PC
Chương trình xử lý được bắt đầu khi nhận được tín hiệu RUN và kết thúc tại STOP do PC gởi đến.
Các ngõ vào Input 2, 3, 4 được đọc về từ switch nên được thực hiện theo mức ưu tiên (từ 2 đến 4) nếu có nhiều ngõ vào cùng tích cực
Nếu tại một thời điểm mà không có dạng sóng ra nào được chọn thì hệ thống ở chế độ chờ và có thông báo ra PC
Các dạng sóng ngõ ra chỉ nhằm mục đích minh họa cho ứng dụng của việc sử dụng tập lệnh nên nó được xây dựng rất đơn giản với các dạng sóng ngõ ra có độ dốc không đổi
Trang 14I CÁC DẠNG SÓNG NGÕ RA
End
Đọc ngõ vào input 1 từ kit để chọn chế độ hoạt
động
Trạng thái RUN?
Y
Input 1=1
Hoạt động từ kit
Đọc các ngõ vào input 2,3,4 từ
data switch
input 2=1?
Sóng ra dạng răng cưa lên
Sóng ra dạng răng cưa xuống
Chế độ chờ
input4=1
?
Y
Y
Sóng ra dạng nón
Y
input3=1?
N
N
N
N
Hoạt động từ PC
Đọc các ngõ vào input 2,3,4 PC truyền về
Y
N
Trang 15Sóng ra dạng răng cưa xuống Sóng ra dạng răng cưa lên
Cài đặt trị đỉnh
Sóng ra =trị đỉnh
Sóng ra ≠0?
Giảm sóng ra
Y
Y N
Timer = 100ms
N
Cài đặt trị đỉnh
Sóng ra =0
Sóng ra < trị đỉnh
Tăng sóng ra
Y
Y N
Timer = 100ms
N