Beruflich Dokumente
Kultur Dokumente
SENARAI PROGRAM
CX Supervisor Ver. 3.2 DBRead( "Data Limit
-------------------------------- In.Recordset2" )
Database END SUB
--------------------------------
SUB ReadChainDatabase() SUB ReadLimitOutDatabase()
DBRead( "Runtime.Recordset2" )
END SUB SUB WriteHeaterDatabase()
SUB ReadSolenoid1Database() DBAddNew( "Data
Heater.Recordset1" )
DBRead( "Data Solenoid Valve DBExecute( "Data
1.Recordset2" ) Heater.Recordset2", "Requery" )
DBMove( "Data
END SUB Heater.Recordset2", "Position" ,
record_index )
SUB ReadSolenoid2Database()
END SUB
DBRead( "Data Solenoid Valve
2.Recordset2" ) SUB WriteInstrument()
END SUB
DBMove( "Data Level Switch DBAddNew( "Data Limit Seal
3.Recordset2", "Position", Close.Recordset1" )
record_index) DBExecute( "Data Limit Seal
Close.Recordset2", "Requery" )
DBMove( "Data Limit Seal
END SUB Close.Recordset2", "Position",
record_index )
SUB WriteLimitDoorClose()
END SUB
DBAddNew( "Data Limit Door
Close.Recordset1" ) SUB WriteLimitSealOpen()
DBExecute( "Data Limit Door
Close.Recordset2", "Requery" ) DBAddNew( "Data Limit Seal
DBMove( "Data Limit Door Open.Recordset1" )
Close.Recordset2", "Position", DBExecute( "Data Limit Seal
record_index ) Open.Recordset2", "Requery" )
DBMove( "Data Limit Seal
END SUB Open.Recordset2", "Position",
record_index )
SUB WriteLimitDoorOpen()
END SUB
DBAddNew( "Data Limit Door
Open.Recordset1" ) SUB WriteMotor1Database()
DBExecute( "Data Limit Door
Open.Recordset2", "Requery" ) DBAddNew( "Data Motor
DBMove( "Data Limit Door 1.Recordset1" )
Open.Recordset2", "Position", DBExecute( "Data Motor
record_index ) 1.Recordset2", "Requery" )
DBMove( "Data Motor
END SUB 1.Recordset2", "Position" ,
record_index )
SUB WriteLimitInDatabase()
END SUB
DBAddNew( "Data Limit
In.Recordset1" ) SUB WriteMotor2Database()
DBExecute( "Data Limit
In.Recordset2", "Requery" ) DBAddNew( "Data Motor
DBMove( "Data Limit 2.Recordset1" )
In.Recordset2", "Position" , DBExecute( "Data Motor
record_index ) 2.Recordset2", "Requery" )
DBMove( "Data Motor
END SUB 2.Recordset2", "Position" ,
record_index )
SUB WriteLimitOutDatabase()
END SUB
DBAddNew( "Data Limit
Out.Recordset1" ) SUB WriteMotor3Database()
DBExecute( "Data Limit
Out.Recordset2", "Requery" ) DBAddNew( "Data Motor
DBMove( "Data Limit 3.Recordset1" )
Out.Recordset2", "Position" , DBExecute( "Data Motor
record_index ) 3.Recordset2", "Requery" )
DBMove( "Data Motor
END SUB 3.Recordset2", "Position" ,
record_index )
SUB WriteLimitSealClose()
END SUB DBMove( "Data Solenoid Valve
3.Recordset2", "Position" ,
SUB WriteMotorVacuumDatabase() record_index)
IF motor1plc THEN
banturuntimemotor1 = Script Name: motor 2 alarm
banturuntimemotor1 + 1 Trigger Event: On Condition
banturuntimechain = Expression: doorclosealarm OR
banturuntimechain + 1 dooropenalarm
ENDIF
alarmnote = "Motor 2 is not
IF motor2plc THEN working properly"
banturuntimemotor2 = CALL addalarm( )
banturuntimemotor2 + 1
ENDIF
Script Name: motor 3 alarm
IF motor3plc THEN Trigger Event: On Condition
banturuntimemotor3 = Expression: sealinalarm OR
banturuntimemotor3 + 1 sealoutalarm
ENDIF
alarmnote = "Motor 3 is not
IF solenoidt THEN working properly"
banturunsolpull = CALL addalarm( )
banturunsolpull + 1
ENDIF
Script Name: Sol Valve 3
runtimesol1 = (banturuntimesol1 Trigger Event: On Condition
/ 60) Expression: waterinalarm
runtimesol2 = (banturuntimesol2
/ 60) alarmnote = "Solenoid valve 3 is
runtimesol3 = (banturuntimesol3 not working properly"
/ 60) CALL addalarm( )
runtimechain =
(banturuntimechain / 60)
runtimeheater = --------------------------------
(banturuntimeheater / 60) Main Page
runtimemotor1 = --------------------------------
(banturuntimemotor1 / 60)
runtimemotor2 = Script Name: Runtime in Times
(banturuntimemotor2 / 60) Trigger Event: On Regular
runtimemotor3 = Interval
(banturuntimemotor3 / 60) Interval Time: 10 Milliseconds
runtimemotorvac =
(banturuntimemotorvac / 60) IF limitdcplc THEN
runtimevalve4 = (banturunvalve4 banturunlimitdc =
/ 60) banturunlimitdc + 1
runtimesolpull = ELSE
(banturunsolpull / 60) banturunlimitdc =
banturunlimitdc - 1
ENDIF
Script Name: motor 1 alarm
Trigger Event: On Condition IF banturunlimitdc == 2 THEN
runtimelimitdc = IF limitoutplc THEN
runtimelimitdc + 1 banturunlimitout =
ENDIF banturunlimitout + 1
ELSE
IF limitdoplc THEN banturunlimitout =
banturunlimitdo = banturunlimitout - 1
banturunlimitdo + 1 ENDIF
ELSE
banturunlimitdo = IF banturunlimitout == 2 THEN
banturunlimitdo - 1 runtimelimitout =
ENDIF runtimelimitout + 1
ENDIF
IF banturunlimitdo == 2 THEN
runtimelimitdo = IF level1plc THEN
runtimelimitdo + 1 banturunlevelswitch =
ENDIF banturunlevelswitch + 1
ELSE
IF limitscplc THEN banturunlevelswitch =
banturunlimitsc = banturunlevelswitch - 1
banturunlimitsc + 1 ENDIF
ELSE
banturunlimitsc = IF banturunlevelswitch == 2 THEN
banturunlimitsc - 1 runtimelevelswitch =
ENDIF runtimelevelswitch + 1
ENDIF
IF banturunlimitsc == 2 THEN
runtimelimitsc = IF level2plc THEN
runtimelimitsc + 1 banturunlevelswitch2 =
ENDIF banturunlevelswitch2 + 1
ELSE
IF limitsoplc THEN banturunlevelswitch2 =
banturunlimitso = banturunlevelswitch2 - 1
banturunlimitso + 1 ENDIF
ELSE
banturunlimitso = IF banturunlevelswitch2 == 2
banturunlimitso - 1 THEN
ENDIF runtimelevelswitch2 =
runtimelevelswitch2 + 1
IF banturunlimitso == 2 THEN ENDIF
runtimelimitso =
runtimelimitso + 1 IF level3plc THEN
ENDIF banturunlevelswitch3 =
banturunlevelswitch3 + 1
IF limitinplc THEN ELSE
banturunlimitin = banturunlevelswitch3 =
banturunlimitin + 1 banturunlevelswitch3 - 1
ELSE ENDIF
banturunlimitin =
banturunlimitin - 1 IF banturunlevelswitch3 == 2
ENDIF THEN
runtimelevelswitch3 =
IF banturunlimitin == 2 THEN runtimelevelswitch3 + 1
runtimelimitin = ENDIF
runtimelimitin + 1
ENDIF
Script Name: Runtime in Minutes
Trigger Event: On Regular runtimechain =
Interval (banturuntimechain / 60)
Interval Time: 1000 Milliseconds runtimeheater =
(banturuntimeheater / 60)
IF water_in THEN runtimemotor1 =
banturuntimesol1 = (banturuntimemotor1 / 60)
banturuntimesol1 + 1 runtimemotor2 =
ENDIF (banturuntimemotor2 / 60)
runtimemotor3 =
IF water_out THEN (banturuntimemotor3 / 60)
banturuntimesol2 = runtimemotorvac =
banturuntimesol2 + 1 (banturuntimemotorvac / 60)
banturuntimemotorvac = runtimevalve4 = (banturunvalve4
banturuntimemotorvac + 1 / 60)
ENDIF runtimesolpull =
(banturunsolpull / 60)
IF steam_valve THEN
banturuntimesol3 =
banturuntimesol3 + 1 Script Name: timeoutalarm
ENDIF Trigger Event: On Regular
Interval
IF heaterplc THEN Interval Time: 1000 Milliseconds
banturuntimeheater =
banturuntimeheater + 1 IF cart_outt THEN
banturunvalve4 = cartoutint = cartoutint + 1
banturunvalve4 + 1 ELSE
ENDIF cartoutint = cartoutint - 1
ENDIF
IF motor1plc THEN
banturuntimemotor1 = IF cartoutint == 15 THEN
banturuntimemotor1 + 1 cartoutalarm = TRUE
banturuntimechain = ELSE
banturuntimechain + 1 cartoutalarm = FALSE
ENDIF ENDIF
IF door_opent THEN
dooropenint = dooropenint + 1
ELSE
dooropenint = dooropenint - 1
ENDIF
IF dooropenint == 15 THEN
dooropenalarm = TRUE
ELSE
dooropenalarm = FALSE
ENDIF
IF seal_outt THEN
sealoutint = sealoutint + 1
ELSE
sealoutint = sealoutint - 1
ENDIF
IF sealoutint == 10 THEN
sealoutalarm = TRUE
ELSE
sealoutalarm = FALSE
ENDIF
IF seal_int THEN
sealinint = sealinint + 1
ELSE
sealinint = sealinint -1
ENDIF
IF sealinint == 10 THEN
sealinalarm = TRUE
ELSE
sealinalarm = FALSE
ENDIF
Visual Studio C# 2010 timer1.Stop();
-------------------------------- label1.Text = "0";
Form1.cs }
--------------------------------
using System; double a;
using System.Collections.Generic; private void
using System.ComponentModel; timer1_Tick(object sender, EventArgs
using System.Data; e)
using System.Drawing; {
using System.Linq; a++;
using System.Text;
using System.Windows.Forms; axMathworks_Strip1.AddXY(0, a,
using System.Data.OleDb; V[0]);
label1.Text =
namespace TEST1 Convert.ToString(V[0]);
{ temp =
public partial class Form1 : Convert.ToInt32(V[0]);
Form this.ConnectDb();
{ }
OleDbConnection connect =
new OleDbConnection(); double[] V = new Double[8];
OleDbCommand command = new private void
OleDbCommand(); serialPort1_DataReceived(object
int temp; sender,
public Form1() System.IO.Ports.SerialDataReceivedEv
{ entArgs e)
InitializeComponent(); {
} char[] awal = new
char[2];
private void string[] buf_port = new
button1_Click(object sender, string[8];
EventArgs e)
{ serialPort1.Read(awal,
serialPort1.Close(); 0, 1);
serialPort1.PortName = if (awal[0] == 'A')
comboBox1.Text; {
serialPort1.BaudRate = buf_port[0] =
9600; serialPort1.ReadLine();
serialPort1.Parity = V[0] =
System.IO.Ports.Parity.None; Convert.ToDouble(buf_port[0]);
serialPort1.DataBits = }
8; }
serialPort1.StopBits =
System.IO.Ports.StopBits.One; private void
serialPort1.Open(); comboBox1_Click(object sender,
button1.Enabled = false; EventArgs e)
button2.Enabled = true; {
timer1.Start(); comboBox1.Items.Clear();
} foreach (string r in
System.IO.Ports.SerialPort.GetPortNa
private void mes())
button2_Click(object sender, {
EventArgs e)
{ comboBox1.Items.Add(r);
serialPort1.Close(); }
button1.Enabled = true; }
button2.Enabled = false;
private void ConnectDb()
{
try
{
connect.ConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;
Data
Source=C:\Users\IKAL\Documents\rev6.
accdb";
command.CommandText
= "INSERT INTO rev6 (nomer) VALUES
('" + temp + "')";
connect.Open();
command.Connection =
connect;
command.ExecuteNonQuery();
connect.Close();
}
catch (Exception)
{
}
}
private void
CloseConnectDb()
{
if (connect != null)
{
connect.Close();
}
}
}
}
LAMPIRAN B
LADDER DIAGRAM
LAMPIRAN D
DATA PENGUJIAN
Tabel Data pengujian tombol start.
Pengujian ke- Instrument Kondisi pada Plant
1 On
2 Motor 1 On
3 On
Pengujian Keadaan
Instrument Keadaan Pada HMI
ke- pada Plant
1 Off Indikator Kuning dan alarm aktif
2 Motor 1 Off Indikator Kuning dan alarm aktif
3 Off Indikator Kuning dan alarm aktif
1 Off Indikator Kuning dan alarm aktif
2 Motor 2 Off Indikator Kuning dan alarm aktif
3 Off Indikator Kuning dan alarm aktif
1 Off Indikator Kuning dan alarm aktif
Motor 3
2 Off Indikator Kuning dan alarm aktif
3 Off Indikator Kuning dan alarm aktif
1 Off Indikator Kuning dan alarm aktif
Solenoid
2 Off Indikator Kuning dan alarm aktif
Valve 1
3 Off Indikator Kuning dan alarm aktif
LAMPIRAN F
MAKALAH SEMINAR TUGAS AKHIR
PERANCANGAN SISTEM ANTARMUKA BERBASIS HMI (HUMAN
MACHINE INTERFACE) PADA MESIN YARN CONDITIONING PLANT
DI PT. APAC INTI CORPORA
E-mail: rousyanfaikar@gmail.com
Abstrak
Industri tekstil dan produk tekstil (TPT) merupakan salah satu industri yang penting karena merupakan
gabungan dari industri berteknologi tinggi, padat modal, dan keterampilan sumber daya manusia yang menyerap
tenaga kerja. Namun secara internal industri tekstil di Indonesia masih menghadapi berbagai permasalahan yang
disebabkan karena peralatan yang relatif tua. Salah satu sistem yang berfungsi untuk meningkatkan
produktivitas adalah sistem SCADA. SCADA pada Yarn Conditioning Plant (YCP) dibuat dengan
menggunakan personal computer (PC) sebagai HMI dan master station, CX-Supervisor sebagai program HMI.
PLC Omron CPM1A digunakan sebagai jalur komunikasi antara master dan slave station. Visual studio c#
sebagai media akuisisi data temperatur dari mikrokontroler. Manajemen informasi dirancang menggunakan
Microsoft Access 2010 sebagai penyimpaan database. Pada penelitian ini terdapat 4 pengujian yaitu pengujian
pengontrolan, monitoring, delay dan database. Dari hasil 4 pengujian tersebut didapatkan sistem berjalan dengan
baik. Pada pengujian pengontrolan tombol start, stop dan reset, plant dapat dikendalikan sesuai dengan yang
seharusnya. Pengujian monitoring, HMI dapat mengikuti segala kondisi pada plant. Pada pengujian delay
didapat adanya delay 1,201 detik antara komunikasi HMI dan PLC. Pada pengujian database semua informasi
yang dibutuhkan dapat disimpan dengan baik pada MS access 2010.
Abstract
The textile (TPT) is one of important industry because it is a combination among high-tech technology, capital
intensive, and absorbs so many human resources. However, internally the textile industries in Indonesia have to
face so many problems due to the use of old machines. One of the systems that serve to increase productivity is
the SCADA system. SCADA in Yarn Conditioning Plant is built by using personal computer (PC) as human-
machine interface (HMI) and master station, CX-supervisor is used as HMI program. Omron PLC, CPM1A, is
used as communication line between master and slave stations. Slav. Visual Studio C# has a function to collect
temperature data from microcontroller to HMI. Information management was designed utilizing Microsoft
Access 2010 as data storage connected to HMI. In this research, there are four assessments carried out: control,
monitoring, delay and database. Based on the assessments, it can be inferred that system worked well. In the
control assessments, the start, stop and reset button can control the plant as it has to be. Monitoring assessments,
HMI can follow all condition of the plant. In delay assessments, the delay between HMI and PLC obtained
1,201 second. All of required information could be stored property in Microsoft Access 2010 based on database
assessment.
2. Metode
2.1 Prinsip Kerja Sistem
Visual C# CX Supervisor
START START
Halaman Awal
Ya
Call Database
Ya Cek
Gambar 2. Rancangan sistem SCADA Alarm
Tidak
Protokol Komunikasi
Slave Station Tidak
Kirim
Disconnect Proses Berjalan
Data Temperatur
Pada pengujian ini akan dilihat kenaikan runtime Gambar 8. Tampilan halaman pengontrolan saat
dari beberapa perangkat keras tersebut dari proses terjadi gangguan
pertama sampai proses ketiga. Tabel 6.
menunjukkan hasil penambahan runtime setelah Pada kotak alarm diatas memberikan informasi
tiga kali proses berjalan. bahwa motor 1 sedang dalam kondisi on, namun
pada keadaan plant sebenarnya adalah off karena
Data limit in selama proses berlangsung power supply ke motor 1 dilepas. Indikator
ditunjukkan pada Gambar 6. Gambar tersebut berwarna kuning aktif pada motor 1 menunjukkan
menunjukkan sejak pemasangan awal limit in terjadi gangguan pada aktuator tersebut. Berikut
pada tanggal 31 Mei 2015, limit in memiliki nilai adalah tabel pengujian monitoring timeout alarm
runtime sebanyak 501 times.. Karena nilai yang diujikan sebanyak 3 kali pada masing-
runtime pada limit in telah melebihi nilai lifetime masing instrument.
Tabel 4.21 Hasil Pengujian monitoring timeout
alarm
3.3.4 Pengujian Monitoring Data Gambar 10. Hasil Pengujian database data
Temperatur instrument.
LCD
C#
HMI
Referensi
[1] Asmara, Alla, Yeti Lis Purnamadewi, Sri Sumardi, ST,MT
Mulatsih dan Tanti Novianti , “Faktor - Faktor NIP.196811111994121001
yang Memengaruhi Perkembangan Investasi
pada Industri Tekstil dan Produk Tekstil (TPT)
Indonesia”, School of Business and Management
- Institut Teknologi Bandung. 2013; 12(2): 140-
141.
[2] Midian F.D., Jason, "Perancangan Sistem
Antarmuka Berbasis HMI untuk Aplikasi Mesin
Etching PCB", Universitas Indonesia, Depok,
2009.
[3] Maurice, Juan, " Perancangan Sistem Kontrol
Berbasis PLC dan Mikrokontroler pada Mesin
Yarn Conditioning Plant (YCP) di PT. Apac Inti
Corpora ", Universitas Diponegoro, Semarang,
2015.
LAMPIRAN G
BIODATA MAHASISWA
BIODATA MAHASISWA
Pendidikan:
1. TK Tarbiyathul Athfal (1998-1999)
2. SD Negeri 1 Penanggulan (1999-2005)
3. SMP Negeri 1 Pegandon (2005-2008)
4. SMA Negeri 1 Kendal (2008-2011)
5. Teknik Elektro Universitas Diponegoro (2011-sekarang)
PengalamanOrganisasi:
1. Staf Divisi Nano Device and Instrumentation di NASAFOR,
(Nano Sains Forum Undip) (2011-2012)
2. Kepala Divisi Nano Device and Instrumentation di NASAFOR,
(Nano Sains Forum Undip) (2012-2013)
3. Staf PHILAR (Pecinta Alam Teknik Elektro),
Universitas Diponegoro (2012-2013)