12 – 48VAC 5VDC (TTL) 0VAC 24VDC
BÀI 3: CÁC PHÉP TỐN SỐ CỦA PLC MÃ BÀI: MĐ21-
MÃ BÀI: MĐ21-03
Mục tiêu:
+ Trình bày được các phép tốn so sánh, các phép tốn số.
+ Vận dụng được các bài tốn vào thực tế: Lập trình, kết nối, chạy thử... + Rèn luyện đức tính tích cực, chủ động và sáng tạo Nội dung chính: 1. Lệnh dịch chuyển (move) FBD LAD STL Bảng thơng số
Thơng số Kiểu dữ liệu Vùng nhớ Mơ tả
Chân EN Bool I,Q,M,L,D Khi chân này chuyển từ mức 0 lên mức 1 thì lệnh sẽ
chuyển gía trị ở ngõ vào IN vào ơ nhớ của ngõ ra OUT. Chú ý kiểu dữ liệu ở ngõ vào IN và ngõ ra OUT phải cùng kiểu. Chân IN Tất cả các kiểu dữ liệu và hằng số cĩ chiều dài 8, 16, 32 bit I,Q,M,L,D và hằng số Đây là ngõ vào dùng để đặt dữ liệu cần chuyển đến vùng nhớ khác. Chân OUT Tất cả các kiểu dữ liệu và hằng số cĩ chiều dài 8, 16, 32 bit I,Q,M,L,D Đây là ngõ ra để cất giữ dữ liệu từ ngõ vào IN chuyển đến
Chân
ENO Bool I,Q,M,L,D
Báo hiệu trạng thái của lệnh. Nếu chân EN chuyển từ mức 0 lên mức 1 thì ENO cũng lên mức 1 và ngược lại
Description
MOVE (Assign a Value) is activated by the Enable EN Input. The value specified at the IN input is copied to the address specified at the OUT output. ENO has the same logic state as EN. MOVE can copy only BYTE, WORD, or DWORD data objects. User-defined data types like arrays or structures have to be copied with the system function "BLKMOVE" (SFC 20).
2. Nhĩm lệnh so sánh (Comperator) 2.1. So sánh số nguyên Integer
Lệnh EQ_I ( Equal Integer): So sánh MW100 và MW102, nếu 2 số nguyên bằng nhau thì KQ=KT
Lệnh NE_I ( Not Equal Integer) : So sánh MW100 và MW102, nếu 2 số này khác nhau thì KQ=KT.
Lệnh GT_I ( Greater than Integer) : So sánh 2 số MW100 và MW102 , nếu MW100 lớn hơn MW102 thì KQ=KT
Lệnh LT_I ( Less than Integer ) : So sánh 2 số MW100 và MW102, nếu MW100 bé hơn MW102 thì KQ=KT
Lệnh GE_I ( Greater than or equal Integer ) : So sánh 2 số MW100 và MW102, nếu MW100 lớn hơn hoặc bằng MW102 thì KQ=KT
Lệnh LE_I ( Less than or equal Integer ) : So sánh 2 số MW100 và MW102, Nếu MW100 bé hơn hặc bằng MW102 thì KQ=KT
2.2. So sánh số nguyên kép Double Integer (DI)
Lệnh EQ_D ( Equal Double Integer): So sánh MD100 và MD104, nếu 2 số nguyên này bằng nhau thì KQ=KT
Lệnh NE_D ( Not Equal Double Integer) : So sánh MD100 và MD104, nếu 2 số nguyên này khác nhau thì KQ=KT.
Lệnh GT_D ( Greater than DoubleInteger) : So sánh 2 số MD100 và MD104, nếu MD100 lớn hơn MD104 thì KQ=KT
Lệnh LT_D ( Less than DoubleInteger ) : So sánh 2 số MD100 và MD104, nếu MD100 bé hơn MD104 thì KQ=KT
Lệnh GE_D ( Greater than or equal DoubleInteger ): So sánh 2 số MD100 và MD104, nếu MD100 lớn hơn hoặc bằng MD104 thì KQ=KT
Lệnh LE_D ( Less than or equal DoubleInteger): So sánh 2 số MD100 và MD104, nếu MD100 bé hơn hoặc bằng MD104 thì KQ=KT
2.3. So sánh số thực Real (R)
Lệnh EQ_R ( Equal Real): So sánh MD100 và MD104, nếu 2 số nguyên này bằng nhau thì KQ=KT
Lệnh NE_R ( Not Equal Real) : So sánh MD100 và MD104, nếu 2 số này khác nhau thì KQ=KT.
Lệnh GT_R ( Greater than Real) : So sánh 2 số MD100 và MD104 ,nếu MD100 lớn hơn MD104 thì KQ=KT
Lệnh LT_R ( Less than Real ) : So sánh 2 số MD100 và MD104, Nếu MD100 bé hơn MD104 thì KQ=KT
Bài tập ứng dụng: dùng lệnh MOVE và nhĩm lệnh so sánh, timer viết chương trình điều khiển đèn giao thơng ngã tư với 2 luồng đèn dùng PLC S7- 300.
Ấn nút START hệ thống bắt đầu làm việc tự động: Muốn dừng hệ thống ấn nút STOP.
Thời gian sáng của mỗi đèn như sau: - Đèn xanh (X) sáng 25s - Đèn vàng (V)sáng 5s - Đèn đỏ (D) sáng 30s 3. Nhĩm lệnh dịch/xoay (Shift/Rotate) Nhĩm lệnh dịch/xoay bao gồm các lệnh sau:
SHR_I Shift Right Integer
SHR_DI Shift Right Double Integer SHR_W Shift Right Word
SHL_W Shift Left Word
SHR_DW Shift Right Double Word SHL_DW Shift Left Double Word ROR_DW Rotate Left Double Word ROL_DW Rotate Right Double Word 3.1. Lệnh dịch phải một số nguyên (SHR_I)
Thơng số Loại dữ liệu Vùng nhớ Mơ tả
Chân EN BOOL I,Q,M,L,D Ngõ vào cho phép
Chân IN INT I,Q,M,L,D Ngõ vào của bit cĩ nội dung cần dịch
Chân N WORD I,Q,M,L,D Số Bit dịch một lần Chân ENO BOOL I,Q,M,L,D Ngõ ra cho phép
Chân Out INT I,Q,M,L,D Ngõ ra dể lưu kết quả sau khi lệnh thực hiện xong
Nguyên lý hoạt động của lệnh:
Khi chân EN chuyển từ mức 0 lên mức 1, lệnh sẽ thực hiện dịch nội dung của các bit trong một từ đơn đặt ở chân IN sang bên phải. Trong mỗi lần dịch, nội dung của bit ở bên phải sẽ bị đẩy ra ngồi( ra khỏi bit thứ 0 của từ đơn) và các con số 1 sẽ được đưa vào bit ở bên trái ( bit thứ 15 của từ đơn)
nếu như bit này chứa số 1 và sẽ đưa vào các con số 0 nếu như bit chứa số 0. Số bit mỗi lần dịch bằng giá trị đặt trước ở chân N. Sau khi lệnh thực hiện xong sẽ lưu kết quả ở ngõ ra OUT.
3.2. Lệnh dịch phải một số nguyên kép ( SHR_DI)
Lệnh này dịch nội dung của ơ nhớ cĩ độ dài 32 bit. Khi chân EN chuyển từ mức 0 lên mức 1, lệnh sẽ thực hiện dịch nội dung của các bit trong một từ kép đặt ở chân IN sang bên phải. Trong mỗi lần dịch, nội dung của bit ở bên phải sẽ bị đẩy ra ngồi từ ( ra khỏi bit thứ 0 của từ kép) và các con số 1 sẽ được đưa vào bit ở bên trái nếu bit thứ 31 của từ kép này chứa số 1 và số 0 sẽ đưa vào nếu bit này chứa số 0. Số bit mỗi lần dịch bằng giá trị đặt trước ở chân N. Sau khi lệnh thực hiện xong sẽ lưu kết quả ở ngõ ra OUT.
3.3. Lệnh dịch trái một từ (SHL_W) Ký hiệu lệnh
Thơng số Loại dữ liệu Vùng nhớ Mơ tả
Chân EN BOOL I,Q,M,L,D Ngõ vào cho phép
Chân IN INT I,Q,M,L,D Ngõ vào của bit cĩ nội dung cần dịch Chân N WORD I,Q,M,L,D Số Bit dịch một lần
Chân
ENO BOOL I,Q,M,L,D Ngõ ra cho phép
Chân Out INT I,Q,M,L,D Ngõ ra dể lưu kết quả sau khi lệnh thực hiện xong
Nguyên lý của lệnh
Khi chân EN chuyển từ mức 0 lên mức 1, lệnh sẽ thực hiện dịch nội dung của các bit trong một từ đơn đặt ở chân IN sang bên trái. Trong mỗi lần dịch, nội dung của bit ở bên trái sẽ bị đẩy ra ngồi( ra khỏi bit thứ 15 của từ đơn) và các con số 0 sẽ được đưa vào bit ở bên phải Số bit mỗi lần dịch bằng giá trị đặt trước ở chân N. Sau khi lệnh thực hiện xong sẽ lưu kết quả ở ngõ ra OUT.
Nguyên lý của lệnh
Khi chân EN chuyển từ mức 0 lên mức 1, lệnh sẽ thực hiện dịch nội dung của các bit trong một từ kép đặt ở chân IN sang phải. Trong mỗi lần dịch, nội dung của bit ở bên phải sẽ bị đẩy ra ngồi ( ra khỏi bit thứ 0 của từ kép) và các con số 0 sẽ được đưa vào bit ở bên trái. Số bit mỗi lần dịch bằng giá trị đặt trước ở chân N. Sau khi lệnh thực hiện xong sẽ lưu kết quả ở ngõ ra OUT.
Description
SHR_DW (Shift Right Double Word) is activated by a logic "1" at the Enable (EN) Input. The SHR_DW instruction is used to shift bits 0 to 31 of input IN bit by bit to the right. The input N specifies the number of bits by which to shift. If N is larger than 32, the command writes a "0" at output OUT and sets the bits CC 0 and OV in the status word to "0". N zeros are also shifted in from the left to fill vacated bit positions. The result double word of the shift instruction can be scanned at output OUT. The CC 0 bit and the OV bit are set to "0" by SHR_DW if N is not equal to 0. ENO has the same signal state as EN.
3.5. Lệnh dịch trái một từ kép (SHL_DW) 3.6. Lệnh Dịch phải một từ kép
Thơng số Loại dữ liệu Vùng nhớ Mơ tả
Chân EN BOOL I,Q,M,L,D Ngõ vào cho
phép
Chân IN DWORD I,Q,M,L,D
Ngõ vào của từ kép cĩ nội dung cần xoay
Chân N WORD I,Q,M,L,D Số Bit xoay một
lần
Chân ENO BOOL I,Q,M,L,D Ngõ ra cho phép
Chân Out DWORD I,Q,M,L,D
Ngõ ra dể lưu kết quả sau khi lệnh thực hiện xong Nguyên lý hoạt động của lệnh:
Khi chân EN chuyển từ mức 0 lên mức 1, lệnh sẽ xoay nội dung của các bit trong một từ kép đặt ở chân IN sang bên trái. Nội dung chứa trong các bit sẽ đi ra ở bit thứ 31 của từ kép và đi vào bit thứ 0 của từ kép này. Số bit của
một lần xoay bằng với giá tri đặt trước ở chân N . Sau khi lệnh thực hiện xong sẽ lưu kết quả ở ngõ ra OUT
3.8. Lệnh xoay phải một từ kép ROR_DW
Nguyên lý hoạt động của lệnh
Khi chân EN chuyển từ mức 0 lên mức 1, lệnh sẽ xoay nội dung của các bit trong một từ kép đặt ở chân IN sang bên phải. Nội dung chứa trong các bit sẽ đi ra ở bit thứ 0 của từ kép và đi vào bit thứ 31 của từ kép này. Số bit của một lần xoay bằng với giá tri đặt trước ở chân N . Sau khi lệnh thực hiện xong sẽ lưu kết quả ở ngõ ra OUT
Description
ROR_DW (Rotate Right Double Word) is activated by a logic "1" at the Enable (EN) Input. The ROR_DW instruction is used to rotate the entire contents of input IN bit by bit to the right. The input N specifies the number of bits by which to rotate. If N is larger than 32, the double word IN is rotated by ((N-1) modulo 32)+1 positions. The bit positions shifted in from the left are assigned the logic states of the bits which were rotated out to the right. The result double word of the rotate instruction can be scanned at output OUT. The CC 0 bit and the OV bit are set to "0" by ROR_DW if N is not equal to 0. ENO has the same signal state as EN.
Bài tập ứng dụng: Viết chương trình điều khiển 8 động cơ hoạt động theo yêu cầu sau: ấn start M1 làm việc, nếu ấn nút T động cơ bên trái làm việc, ấn nút
4. Nhĩm lệnh chuyển đổi dữ liệu (Converter) 4.1. Chuyển đổi BCD_I, I_BCD
Lệnh BCD_I * Lệnh BCD_DI
Khi chân EN chuyển từ 0 lên 1 lệnh sẽ đổi dữ liệu dạng BCD sang số nguyên và lưu ở ngõ ra OUT . Chân EN và ENO luơn luơn cĩ cùng trạng thái tín hiệu
4.2. Chuyển đổi I_DI, BCD_DI
* Lệnh I_BCD *Lệnh DI_BCD
Khi chân EN chuyển từ 0 lên 1 lệnh sẽ đổi dữ liệu dạng số nguyên sang BCD và lưu ở ngõ ra OUT . Chân EN và ENO luơn luơn cĩ cùng trạng thái tín hiệu
4.3.Chuyển đổi Double Integer sang Real * Lệnh chuyển số nguyên kép sang số thực
Bài tập áp dụng:
- Chuyển đổi số BCD trong ơ nhớ MW100 thành I được lưu trong MW102 sau đĩ lại chuyển thành số BCD và lưu ở MW104
- Chuyển đổi số I trong ơ nhớ MW102 thành DI lưu ở ơ nhớ MD106, chuyển đổi số BCD trong MW104 thành DI và lưu ở MD110.
- Chuyển đổi số DI ở MD110 thành số thực R và lưu ở MW114. 5. Nhĩm lệnh tốn học (Integer Function)
5.1. Phép tốn với số nguyên
Lệnh ADD_I : Lệnh thực hiện việc cộng 2 số nguyên 16 Bit ,kết quả cất vào số nguyên 16 Bit,nếu kết quả vượt quá 16 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MW104 = MW100 + MW102
Lệnh SUB_I : Lệnh thực hiện việc trừ 2 số nguyên 16 Bit ,kết quả cất vào số nguyên 16 Bit , nếu kết quả vượt quá 16 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MW104 = MW100 - MW102
Lệnh MUL_I : : Lệnh thực hiện việc nhân 2 số nguyên 16 Bit ,kết quả cất vào số nguyên 16 Bit , nếu kết quả vượt quá 16 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MW104 = MW100 * MW102
Lệnh DIV_I : : Lệnh thực hiện việc chia 2 số nguyên 16 Bit ,kết quả cất vào số nguyên 16 Bit , nếu kết quả vượt quá 16 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó.
5.2. Phép tốn với số nguyên kép
Lệnh ADD_DI : Lệnh thực hiện việc cộng 2 số nguyên 32 Bit , kết quả cất vào số nguyên 32 Bit,nếu kết quả vượt quá 32 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MD108 = MD100 + MD104
Lệnh SUB_DI: Lệnh thực hiện việc trừ 2 số nguyên 32 Bit , kết quả cất vào số nguyên 32 Bit , nếu kết quả vượt quá 32 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MD108 = MD100 - MD104
Lệnh MUL_DI: Lệnh thực hiện việc nhân 2 số nguyên 32 Bit ,kết quả cất vào số nguyên 32 Bit , nếu kết quả vượt quá 32 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MD108 = MD100 * MD104
Lệnh DIV_DI : : Lệnh thực hiện việc chia 2 số nguyên 32 Bit ,kết quả cất vào số nguyên 32 Bit , nếu kết quả vượt quá 32 Bit thì cờ OV sẽ bật lên 1 ,cờ OS sẽ lưu Bit bị tràn đó. MD108 = MD100 : MD104
Bài tập áp dụng:
- Thực hiện các ví dụ trên trên phần mềm Simatic manager 6. Đồng hồ thời gian thực
Trong S7 300: Thời gian thực được định dạng theo kiểu dử liệu DT (DATE - TiME) gồm cĩ 8 byte liên tiếp nhau
byte 0 => năm byte 1 => tháng ...
byte 5 => giây
byte 6 => thứ trong tuần (chủ nhật là số 1) byte 7 => trống
lệnh đọc RTC là SFC1
Bài tập: Cài đặt thời gian cho CPU, đọc thời gian từ đồng hồ hệ thống SFC 0 "SET_CLK" Set the clock
SFC 1 "READ_CLK" Read the clock
FC 3 "D_TOD_DT" - kết hợp ngày và giờ thanh ngày giờ FC 6 "DT_DATE" - trích ngày từ dạng ngày và giờ FC 7 "DT_DAY" - trích thứ từ dạng ngày và giờ
FC 8 "DT_TOD"- trích giờ từ dạng ngày và giờ FC12 so sánh thời gian dạng DT