• Tidak ada hasil yang ditemukan

LAMPIRAN CODE PROGRAM PLC. Program master (P0) STEP 0 IF saklar THEN LOAD V200 TO TP0 SET T0 RESET P1 RESET P2. STEP 1 IF N T0 THEN SET sila SET silc

N/A
N/A
Protected

Academic year: 2021

Membagikan "LAMPIRAN CODE PROGRAM PLC. Program master (P0) STEP 0 IF saklar THEN LOAD V200 TO TP0 SET T0 RESET P1 RESET P2. STEP 1 IF N T0 THEN SET sila SET silc"

Copied!
30
0
0

Teks penuh

(1)

LAMPIRAN CODE PROGRAM PLC Program master (P0) STEP 0 IF saklar THEN LOAD V200 TO TP0 SET T0 RESET P1 RESET P2 STEP 1 IF N T0 THEN SET silA SET silC STEP 2 IF N saklar THEN LOAD V300 TO TP0 SET T0 STEP 3 IF N T0 THEN SET silB

(2)

STEP 4 IF N sb_ret THEN LOAD V300 TO TP0 SET T0 STEP 5 IF N T0 THEN RESET silA RESET silB STEP 6

IF saklar1 AND N saklar2 THEN SET P1 JMP TO 0 OTHRW JMP TO 7 STEP 7

IF saklar2 AND N saklar1 THEN

SET P2 JMP TO 0

OTHRW

(3)

Program slave 1 STEP 0 IF saklar1 THEN LOAD V400 TO TP0 SET T0 STEP 1 IF N T0 THEN SET silD STEP 2 IF sb_ret THEN LOAD V200 TO TP0 SET T0 STEP 3 IF N T0 THEN RESET silD RESET P1 JMP TO 0 Program slave 2 STEP 0 IF saklar2 THEN

(4)

LOAD V400 TO TP0 SET T0 STEP 1 IF N T0 THEN RESET silC STEP 2 IF N sc_ext THEN LOAD V200 TO TP1 SET T0 STEP 3 IF N T0 THEN SET silE STEP 4 IF N se_ret THEN LOAD V100 TO TP1 SET T0 STEP 5

(5)

IF N T0 THEN RESET sile STEP 6 IF se_ret THEN LOAD V200 TO TP1 SET T0 STEP 7 IF N T0 THEN SET silC RESET P2 JMP TO 0

LAMPIRAN CODE PROGRAM OPENCV

/* ---library openCV--- */ #include "stdafx.h"

#include <cv.h> #include <cxcore.h> #include <highgui.h>

(6)

#define PPORT_BASE ((short) 0x378)

/* ---inisialisasi tipe output kirim data--- */

typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum); oupfuncPtr oup32fp;

/* ---inisialisasi fungsi penulisan data register--- */ void Out32 (short portaddr, short datum)

{

(oup32fp)(portaddr,datum); }

/* ---pengiriman logic ke paralel port--- */ void test_write_datum(short datum)

{

short x; short i;

i=PPORT_BASE; x = datum;

/ ---Write the data register--- */ Out32(i,x);

(7)

printf("Port write to 0x%X, datum=0x%2X\n" ,i ,x); }

/* ---fungsi untuk menggambar segitiga pada image--- */ void drawTriangle( IplImage* img, CvSeq* all, char* wndname ) {

CvSeqReader reader;

IplImage* cpy = cvCloneImage( img ); int i;

/* -inisialisasi untuk mulai membaca isi variabel secara berurutan- */ cvStartReadSeq( all, &reader, 0 );

/* -membaca 3 sequence element pada satu waktu (semua vertek pada triangle)- */ for( i = 0; i < all->total; i += 3 ) { CvPoint pt[3], *rect = pt; /* ---membaca 3 vertek--- */ CV_READ_SEQ_ELEM( pt[0], reader ); CV_READ_SEQ_ELEM( pt[1], reader ); CV_READ_SEQ_ELEM( pt[2], reader );

(8)

if (count == 3) { /* ---kirim logic 1---*/ test_write_datum(0x1); }

/* ---gambar segitiga sebagai banyak garis yang tertutup--- */

cvPolyLine( cpy, &rect, &count, 1, 1, CV_RGB(0,255,0), 3, CV_AA, 0 ); }

/* ---menampilkan gambar segitiga--- */ cvShowImage( wndname, cpy );

cvReleaseImage( &cpy ); }

/* ---fungsi untuk menggambar kotak pada image--- */

void drawSquares( IplImage* img, CvSeq* all, char* wndname ) {

CvSeqReader reader;

IplImage* cpy = cvCloneImage( img ); int i;

(9)

/* -inisialisasi untuk mulai membaca isi variabel secara berurutan- */ cvStartReadSeq( all, &reader, 0 );

/* -membaca 4 sequence element pada satu waktu (semua vertek pada square)- */ for( i = 0; i < all->total; i += 4 ) { int a=0; CvPoint pt[4], *rect = pt; int count = 4; /* ---membaca 4 vertek--- */ CV_READ_SEQ_ELEM( pt[0], reader ); CV_READ_SEQ_ELEM( pt[1], reader ); CV_READ_SEQ_ELEM( pt[2], reader ); CV_READ_SEQ_ELEM( pt[3], reader ); if (count == 4) { /* ---kirim logic 1--- */ test_write_datum(0x01); }

(10)

cvPolyLine( cpy, &rect, &count, 1, 1, CV_RGB(0,255,0), 3, CV_AA, 0 ); }

/* ---menampilkan gambar segiempat--- */ cvShowImage( wndname, cpy );

cvReleaseImage( &cpy ); }

/* ---fungsi untuk menggambar segilima pada image--- */ void drawPentagon( IplImage* img, CvSeq* all, char* wndname ) {

CvSeqReader reader;

IplImage* cpy = cvCloneImage( img ); int i;

/* -inisialisasi untuk mulai membaca isi variabel secara berurutan- */ cvStartReadSeq( all, &reader, 0 );

/* -membaca 5 sequence element pada satu waktu (semua vertek pada pentagon)- */ for( i = 0; i < all->total; i += 5 )

{

(11)

int count = 5; /* ---membaca 5 vertek--- */ CV_READ_SEQ_ELEM( pt[0], reader ); CV_READ_SEQ_ELEM( pt[1], reader ); CV_READ_SEQ_ELEM( pt[2], reader ); CV_READ_SEQ_ELEM( pt[3], reader ); CV_READ_SEQ_ELEM( pt[4], reader ); if (count == 5) { /* ---kirim logic 1--- */ test_write_datum(0x01); }

/* ---gambar segilima sebagai banyak garis yang tertutup--- */

cvPolyLine( cpy, &rect, &count, 1, 1, CV_RGB(0,255,0), 3, CV_AA, 0 ); }

/* ---menampilkan gambar segilima--- */ cvShowImage( wndname, cpy );

(12)

}

/* ---fungsi untuk menggambar segienam pada image--- */ void drawHexagon( IplImage* img, CvSeq* all, char* wndname ) {

CvSeqReader reader;

IplImage* cpy = cvCloneImage( img ); int i;

/* -inisialisasi untuk mulai membaca isi variabel secara berurutan- */ cvStartReadSeq( all, &reader, 0 );

/* -membaca 6 sequence element pada satu waktu (semua vertek pada hexagon)- */ for( i = 0; i < all->total; i += 6 ) { CvPoint pt[6], *rect = pt; int count = 6; /* ---membaca 6 vertek--- */ CV_READ_SEQ_ELEM( pt[0], reader ); CV_READ_SEQ_ELEM( pt[1], reader );

(13)

CV_READ_SEQ_ELEM( pt[2], reader ); CV_READ_SEQ_ELEM( pt[3], reader ); CV_READ_SEQ_ELEM( pt[4], reader ); CV_READ_SEQ_ELEM( pt[5], reader );

/* ---gambar segienam sebagai banyak garis yang tertutup--- */

cvPolyLine( cpy, &rect, &count, 1, 1, CV_RGB(0,255,0), 3, CV_AA, 0 ); if (count == 6) { /* ---kirim logic 1--- */ test_write_datum(0x4); } }

/* ---menampilkan gambar segienam--- */ cvShowImage( wndname, cpy );

cvReleaseImage( &cpy ); }

/* ---fungsi untuk menggambar segienam pada image--- */ void drawOctagon( IplImage* img, CvSeq* all, char* wndname )

(14)

{

CvSeqReader reader;

IplImage* cpy = cvCloneImage( img ); int i;

/* -inisialisasi untuk mulai membaca isi variabel secara berurutan- */ cvStartReadSeq( all, &reader, 0 );

/* -membaca 5 sequence element pada satu waktu (semua vertek pada pentagon)- */ for( i = 0; i < all->total; i += 8 ) { CvPoint pt[8], *rect = pt; int count = 8; /* ---membaca 6 vertek--- */ CV_READ_SEQ_ELEM( pt[0], reader ); CV_READ_SEQ_ELEM( pt[1], reader ); CV_READ_SEQ_ELEM( pt[2], reader ); CV_READ_SEQ_ELEM( pt[3], reader ); CV_READ_SEQ_ELEM( pt[4], reader ); CV_READ_SEQ_ELEM( pt[5], reader ); CV_READ_SEQ_ELEM( pt[6], reader ); CV_READ_SEQ_ELEM( pt[7], reader );

(15)

/* ---gambar segienam sebagai banyak garis yang tertutup--- */

cvPolyLine( cpy, &rect, &count, 1, 1, CV_RGB(0,255,0), 3, CV_AA, 0 ); if (count == 8) { /* ---kirim logic 1--- */ test_write_datum(0x4); } }

/* ---menampilkan gambar segiempat--- */ cvShowImage( wndname, cpy );

cvReleaseImage( &cpy ); }

/* ---Fungsi utama--- */ int _tmain(int argc, _TCHAR* argv[]) {

/* ---Load the library--- */ HINSTANCE hLib;

(16)

if (hLib == NULL) {

fprintf(stderr,"LoadLibrary Failed.\n"); return -1;

}

/* ---men-cek alamat fungsi--- */

oup32fp = (oupfuncPtr) GetProcAddress(hLib, "Out32");

if (oup32fp == NULL) {

fprintf(stderr,"GetProcAddress for Oup32 Failed.\n"); return -1;

}

/* ---inisialisasi variabel--- */ double pilih;

int delay=1000, a=0;

IplImage *fileName;

/* ---Tampilan awal--- */

(17)

printf("\n\nMenu Pilihan Benda : \n"); printf ("1. deteksi lingkaran\n"); printf ("2. deteksi segitiga\n"); printf ("3. deteksi segiempat\n"); printf ("4. deteksi segilima\n"); printf ("5. deteksi segienam\n"); printf ("6. deteksi segidelapan\n\n");

do {

int pilih = 1;

if (pilih>0 && pilih<2) {

do {

printf("\n\n\n\n\n\n\n\n\n\n\n\n Detect Circle \n\n\n");

/* ---mengambil citra dari tempat penyimpanan pheephole--- */ IplImage *im2 = cvLoadImage("D:/SKRIPSI/PH3.jpg",1);

IplImage *im1 = cvLoadImage("D:/SKRIPSI/PH3.jpg",0);

(18)

cvNamedWindow("image processing", 1); cvShowImage("image processing", im2);

/* ---threshold--- */

cvThreshold( im1, im1, 119, 150, CV_THRESH_BINARY ); cvNamedWindow("Tres:");

/* ---menampilkan gambar hasil threshold--- */ cvShowImage("Tres:", im1);

printf("Tres Image ON\n");

/* ---edge detection dengan canny--- */

cvCanny(im1, im1, 145, 150, 3); //harus dari grayscale

/* ---menampilkan gambar hasil canny--- */ cvNamedWindow("Canny",1);

cvShowImage("Canny",im1);

printf("Canny Edge Detection ON\n");

/* -menyimpan gambar hasil dari proses canny ke dalam register-*/ cvSaveImage("saved.jpg",im1);

(19)

/* ---inisialisasi variabel type array--- */ IplImage *gray, *view;

CvMemStorage* storage;

CvSeq* circles;

printf("\n Detecting Circles");

storage = cvCreateMemStorage(0); view = cvCloneImage(img);

/* --mengubah besar image dari ukuran tertentu menjadi 8 bit-- */ gray = cvCreateImage( cvGetSize(img), 8, 1 );

cvCvtColor( img, gray, CV_BGR2GRAY );

/* ---smoothing dengan Gaussian--- */

cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // smoothing ini dilakukan untuk mengurangi kesalahan deteksi lingkaran

/* ---mendeteksi lingkaran dengan Hough Gradient--- */

circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 );

(20)

for( int i = 0; i < circles->total; i++ ) {

int count=1;

float* p = (float*)cvGetSeqElem( circles, i );

/* ---menggambar lingkaran yang ditemukan pada image--- */

cvCircle( view, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 );

cvCircle( view, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );

/* --kirim logic 1 ke rangkaian relay melalui parallel port-- */ test_write_datum(0x01);

}

/* ---tampilkan gambar hasil detect lingkaran--- */ cvNamedWindow( "detected", 1 );

cvShowImage( "detected", view );

/* ---delay 1 detik--- */ cvWaitKey(delay);

(21)

/* ---hapus semua data dan tampilan--- */ cvReleaseImage(&img); cvDestroyAllWindows(); }while(delay==3000); } pilih=2; if (pilih<3&&pilih>1) { do {

printf("\n\n\n\n\n\n\n\n\n\n\n\n Detect Vertek \n\n\n");

/* ---mengambil citra dari tempat penyimpanan pheephole--- */ IplImage *im2 = cvLoadImage("D:/SKRIPSI/PH3.jpg",1);

IplImage *im1 = cvLoadImage("D:/SKRIPSI/PH3.jpg",0);

/* ---menampilkan gambar original--- */ cvNamedWindow("image processing", 1);

(22)

/* ---threshold--- */

cvThreshold( im1, im1, 119, 150, CV_THRESH_BINARY );

/* ---menampilkan gambar hasil threshold--- */ cvNamedWindow("Tres:");

cvShowImage("Tres:", im1); printf("Tres Image ON\n");

/* ---edge detection dengan canny--- */

cvCanny(im1, im1, 145, 150, 3); //harus dari grayscale

/* ---menampilkan gambar hasil canny--- */ cvNamedWindow("Canny",1);

cvShowImage("Canny",im1); printf("Canny Edge Detection ON\n");

/* ---menyimpan gambar hasil dari proses canny ke dalam register--- */

cvSaveImage("saved.jpg",im1);

IplImage *img = cvLoadImage("saved.jpg");

/* ---inisialisasi variabel type array--- */ IplImage *gray, *view;

(23)

CvMemStorage* storage;

CvSeq* circles;

/* ---inisialisasi variabel--- */

CvSeq* contours;

int i, c, l, N = 11;

/* ---mencari besarnya image original--- */ CvSize sz = cvSize( img->width, img->height);

IplImage* timg = cvCloneImage( img ); // make a copy of input image IplImage* gray = cvCreateImage( sz, 8, 1 );

/* ---menciptakan image dengan ukuran yang baru (1/2 ukuran image lama)--- */

IplImage* pyr = cvCreateImage( cvSize(sz.width/2, sz.height/2), 8, 3 );

/* ---deklarasi variabel--- */

IplImage* tgray;

CvSeq* result;

double s, t;

(24)

CvSeq* all = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvPoint), storage );

/* ---memilih ROI pada image dengan lebar dan panjangnya dibagi 2--- */

cvSetImageROI( timg, cvRect( 0, 0, sz.width, sz.height ));

/* ---filter untuk mengurangi noise dengan down-scale dan upscale--- */

cvPyrDown( timg, pyr, 7 ); cvPyrUp( pyr, timg, 7 );

tgray = cvCreateImage( sz, 8, 1 );

/* ---menemukan contours dengan metode chain code dan menyimpan semuanya ke dalam sebuah list--- */

cvFindContours( gray, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );

/* ---test setiap contour--- */ while( contours )

{

/* ---memberikan ketebalan garis contour 0.02--- */

result = cvApproxPoly( contours, sizeof(CvContour), storage, CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0 );

(25)

/* ----kontur segitiga harus punya 3 vertek setelah perkiraan yang secara relatif area besar (untuk menyaring noise kontur---/

if( result->total == 3 && fabs(cvContourArea(result,CV_WHOLE_SEQ)) > 1000 && cvCheckContourConvexity(result) )

{

/* ---menyimpan vertek yang ditemukan ke result--- */ cvSeqPush( all,(CvPoint*)cvGetSeqElem( result, i )); }

/* ---cek countour berikutnya--- */ contours = contours->h_next; } }while(delay==3000); } int count pilih=3; if (pilih<4&&pilih>2) { if (count = 3)

(26)

{

printf("\n Detecting Triangle\n"); storage = cvCreateMemStorage(0);

view = cvCloneImage(img);

cvNamedWindow( "detectedT", 1 );

/* ---fungsi untuk detect triangle dan menampilkan hasil deteksi--- */

drawTriangle( view, img, storage, "detectedT" );

/* ---delay 1 detik--- */ cvWaitKey(delay);

/* ---hapus semua data dan tampilan--- */ cvReleaseImage(&img);

cvDestroyAllWindows(); }

if (count = 4) {

(27)

storage = cvCreateMemStorage(0); view = cvCloneImage(img);

cvNamedWindow( "detectedS", 1 );

/* ---fungsi untuk detect triangle dan menampilkan hasil deteksi--- */

drawTriangle( view, img, storage, "detectedS" );

/* ---delay 1 detik--- */ cvWaitKey(delay);

/* ---hapus semua data dan tampilan--- */ cvReleaseImage(&img);

cvDestroyAllWindows(); }

if (count = 5) {

printf("\n Detecting Pentagon \n"); storage = cvCreateMemStorage(0);

view = cvCloneImage(img);

(28)

cvNamedWindow( "detectedP", 1 );

/* ---fungsi untuk detect triangle dan menampilkan hasil deteksi--- */

drawTriangle( view, img, storage, "detectedP" );

/* ---delay 1 detik--- */ cvWaitKey(delay);

/* ---hapus semua data dan tampilan--- */ cvReleaseImage(&img);

cvDestroyAllWindows(); }

if (count = 6) {

printf("\n Detecting Hexagon \n"); storage = cvCreateMemStorage(0);

view = cvCloneImage(img);

(29)

/* ---fungsi untuk detect triangle dan menampilkan hasil deteksi--- */

drawTriangle( view, img, storage, "detectedH" );

/* ---delay 1 detik--- */ cvWaitKey(delay);

/* ---hapus semua data dan tampilan--- */ cvReleaseImage(&img);

cvDestroyAllWindows(); }

if (count = 8) {

printf("\n Detecting Octagon \n"); storage = cvCreateMemStorage(0);

view = cvCloneImage(img);

cvNamedWindow( "detectedO", 1 );

/* ---fungsi untuk detect triangle dan menampilkan hasil deteksi--- */

(30)

drawTriangle( view, img, storage, "detectedO" );

/* ---delay 1 detik--- */ cvWaitKey(delay);

/* ---hapus semua data dan tampilan--- */ cvReleaseImage(&img); cvDestroyAllWindows(); } } }while(delay==1000); }

Referensi

Dokumen terkait

Dengan bertanya juga akan membantu mendorong terciptanya lingkungan pembelajaran yang berpusat pada siswa (student-center learning environment). Strategi ini sangat efektif

terjadi perubahan data fisik atau data yuridis. Setelah Akta Jual Beli telah selesai dibuat maka selanjutnya dilakukan pendaftaran peralihan Hak Milik atas tanah

Jawab: Ilmu tauhid adalah ilmu yang membahas pengokohan keyakinan- keyakinan agama Islam dengan dalil-dalil naqli maupun aqli yang pasti kebenarannya sehingga dapat

Mesin sablon yang sudah dilengkapi dengan alat penggerak otomatis untuk mencetak design pada seragam sekolah tersebut tentu memberikan kecepatan yang lebih tinggi

SISTEM PENDUKUNG KEPUTUSAN PEMILIHAN MAHASISWA BERPRESTASI MENGGUNAKAN METODE AHP DAN LOGIKA FUZZY..

Pada Praktek Kerja Lapangan ini penulis mengikuti praktek pekerjaan kolom. Pekerjaan kolom dikerjakan setelah pekerjaan plat lantai selesai. Pekerjaan kolom

Dengan meningkatnya harga BBM dan listrik terlihat bahwa sektor-sektor industri hilir pertanian memiliki keterkaitan ke belakang cukup tinggi, sehingga dengan

TUNAS MELATI PERKASA yang merupakan suatu perusahaan manufactur, bergerak dalam produksi pembuatan mie bihun rose brand sesuai dengan metode markov chain karena