Wednesday, February 1, 2023

Contoh Mengakses PLC Dengan C# - III

 

9. Get or set PLC time

using System;

using PLCcom;

using System.Windows.Forms;

 

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        #region getPLCClockTime

 

        private void btnGetPLCClockTime_Click(object sender, EventArgs e)

        {

            //execute function

            PLCClockTimeResult res = Device.GetPLCClockTime();

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality.Equals(OperationResult.eQuality.GOOD))

            {

                txtResult.Text = res.PLCClockTime.ToString();

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

 

        #endregion

 

        #region setPLCClockTime

 

        private void btnSetPLCClockTime_Click(object sender, EventArgs e)

        {

            //execute function

            OperationResult res = Device.SetPLCClockTime(DateTime.Now);

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality.Equals(OperationResult.eQuality.GOOD))

            {

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

 

        #endregion

    }

}


10. Reading system status list SSL

using System;

using PLCcom;

using System.Windows.Forms;

 

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnGetSSL_Click(object sender, EventArgs e)

        {

            // important!!! please search the id and index information in the plc-documentation

            // You must convert the specified values hex in decimal

            int SSL_ID = 306; //ID 132 (Hex) 

            int SSL_Index = 4; //Index 4 (Hex) 

            //execute function

            SystemStatusListResult res = Device.GetSystemStatusList(SSL_ID, SSL_Index);

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality == OperationResult.eQuality.GOOD)

            {

                System.Text.StringBuilder sb = new System.Text.StringBuilder();

                foreach (SystemStatusListResult.SystemStatusListItemEntry ssle in res.SZLItemEntrys)

                {

                    foreach (byte b in ssle.buffer)

                    {

                        sb.Append(b.ToString());

                        sb.Append(" ");

                    }

                    sb.Append(Environment.NewLine);

                }

                txtResult.Text = sb.ToString();

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }

}


11. Get diagnostic data

using System;

using PLCcom;

using System.Windows.Forms;

 

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnDiagnosticInfo_Click(object sender, EventArgs e)

        {

            //read the diagnosticinfo into DiagnosticInfoResult-object

            //execute function

            DiagnosticInfoResult res = Device.GetDiagnosticInfo();

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality == OperationResult.eQuality.GOOD)

            {

                System.Text.StringBuilder sb = new System.Text.StringBuilder();

                //step through the entries

                foreach (DiagnosticInfoEntry myDiagnosticInfoEntry in res.DiagnosticInfoEntrys)

                {

                    sb.Append("Timestamp: " + myDiagnosticInfoEntry.DiagnosticTimestamp.ToString());

                    sb.Append(" ");

                    sb.Append("ID: " + myDiagnosticInfoEntry.DiagnosticID.ToString());

                    sb.Append(" ");

                    sb.Append("Message: " + myDiagnosticInfoEntry.DiagnosticText);

                    sb.Append(Environment.NewLine);

                }

                txtResult.Text = sb.ToString();

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }

}


12. Send password

using System;

using PLCcom;

using System.Windows.Forms;

 

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnSendPW_Click(object sender, EventArgs e)

        {

            OperationResult res = Device.sendPassWord("EnterPW");

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality == OperationResult.eQuality.GOOD)

            {

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }

}


Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/

Contoh Mengakses PLC Dengan C# - II

 


5. Simple writing data to PLC

using System;

using PLCcom;

using System.Windows.Forms;

 

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnWrite_Click(object sender, EventArgs e)

        {

            //declare a WriteDataRequest object and

            //write 4 bytes in DB100 at Startbyte 0

            WriteDataRequest myWriteRequest = new WriteDataRequest(eRegion.DataBlock, 100, 0);

            //add writable Data here

            myWriteRequest.addByte(new byte[] { 11, 12, 13, 14 });

            //write

            WriteDataResult res = Device.WriteData(myWriteRequest);

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality.Equals(OperationResult.eQuality.GOOD))

            {

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }


6. Optimized reading and writing of data

using System;

using PLCcom;

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnOptReadWriteClick(object sender, EventArgs e)

        {

 

            ReadWriteRequestSet myRequestSet = new ReadWriteRequestSet();

             

            //set optimize options

            myRequestSet.SetOperationOrder(eOperationOrder.WRITE_BEVOR_READ);

            myRequestSet.SetReadOptimizationMode(eReadOptimizationMode.AUTO);

            myRequestSet.SetWriteOptimizationMode(eWriteOptimizationMode.CROSS_AREAS);

             

            //declare a ReadRequest object set the request parameters, //in this case => read 10 Bytes from DB1 at Byte 0

            ReadDataRequest myReadDataRequest = new ReadDataRequest(

            eRegion.DataBlock,  //Region                                                                       1,                  //DB only for datablock operations otherwise 0                                                                       0,                  //read start adress                                                                       eDataType.BYTE,     //desired datatype                                                                       10);                //Quantity of reading values

             

            //add the read request to the request set

            myRequestSet.AddRequest(myReadDataRequest);

            //declare a WriteRequest object set the request parameters, //in this case => write 4 bytes to DB100 at address 0

            WriteDataRequest myWriteRequest = new WriteDataRequest(eRegion.DataBlock, //Region

            100,             //DB

            0);              //startaddress

             

            //add writable Data here

            //in  this case => write 4 bytes in DB100

            myWriteRequest.addByte(new byte[] { 11, 12, 13, 14 });

             

            //add the write request to the request set

            myRequestSet.AddRequest(myWriteRequest);

             

            //....... add more requests to request set

             

            //read, write and getting the results

            ReadWriteResultSet results = Device.ReadWriteData(myRequestSet);

             

            // evaluate the results of read operations...

            foreach (ReadDataResult res in results.GetReadDataResults())

            {

               //for getting read results see chapter simple read

            }

             

            //...and evaluate the results of write operations

            foreach (WriteDataResult res in results.GetWriteDataResults())

            {

               //for getting write results see chapter simple write

            }

 

        }

    }

}


7. Get basic info from PLC

using System;

using PLCcom;

using System.Windows.Forms;

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void getGetPLCBasicInfo_Click(object sender, EventArgs e)

        {

            //execute function

            BasicInfoResult res = Device.GetBasicInfo();

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality == OperationResult.eQuality.GOOD)

            {

                StringBuilder sb = new StringBuilder();

                sb.Append("Device Name: ");

                sb.Append(res.Name);

                sb.Append(Environment.NewLine);

                sb.Append("Order Number: ");

                sb.Append(res.OrderNumber);

                sb.Append(Environment.NewLine);

                sb.Append("Module Version: ");

                sb.Append(res.ModuleVersion);

                sb.Append(Environment.NewLine);

                sb.Append("Firmware Version: ");

                sb.Append(res.FirmwareVersion);

                sb.Append(Environment.NewLine);

                txtResult.Text = sb.ToString();

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }

}


8. Get mode and state from CPU

using System;

using PLCcom;

using System.Windows.Forms;

 

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnGetCPUMode_Click(object sender, EventArgs e)

        {

            //execute function

            CPUModeInfoResult res = Device.GetCPUMode();

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res.Message;

            if (res.Quality == OperationResult.eQuality.GOOD)

            {

                txtResult.Text = "CPU Mode = " + res.CPUModeInfo.ToString() + Environment.NewLine + "CPU State = " + res.CPUStateInfo.ToString();

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }

}



Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/

Contoh Mengakses PLC Dengan C# - I

 


Programmable Logic Controller, disingkat PLC merupakan peralatan elektronik yang dibangun dari mikroprosesor untuk memonitor keadaan dari peralatan input untuk kemudian di analisa sesuai dengan kebutuhan perencana (programmer) untuk mengontrol keadaan output. Sinyal input diberikan kedalam input card.
Ada 2 jenis input card, yaitu :
  • Analog input card
  • Digital input card

Contoh untuk mengakses PLC :

1. Connect to PLC

using PLCcom;

public class myTestClass

{

    //declare the Device 

    private PLCcomDevice Device;

    private void btnConnect_Click(object sender, System.EventArgs e)

    {

        //create TCP_ISO_Device instance from PLCcomDevice

        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);

        //or create MPI_Device instance from PLCcomDevice 

        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel); 

        //or create PPI_Device instance from PLCcomDevice 

        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);

 

        authentication.User = "";   //Enter User here

        authentication.Serial = ""; //Enter Serial here

         

        Device.Connecttimeout = 1000;

        Device.Readtimeout = 2000;

        ConnectResult res = Device.Connect();

 

        MessageBox.Show(res.Message);

    }

}


2. Disconnect from PLC

Untuk memutuskan koneksi ke PLC cukup 1 baris perintah : Device.DisConnect();


3. Automatic connect to PLC

using PLCcom;

public class myTestClass

{

    //declare the Device 

    private PLCcomDevice Device;

    private void btnConnect_Click(object sender, System.EventArgs e)

    {

        //create TCP_ISO_Device instance from PLCcomDevice

        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);

        //or create MPI_Device instance from PLCcomDevice 

        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel); 

        //or create PPI_Device instance from PLCcomDevice 

        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);

 

        authentication.User = "";

        authentication.Serial = "";

 

        //Set auto connect

        //The connection is opened automatically when it is needed. If after the expiry of the given period, no more requests are sent, the connection is automatically closed.

        Device.setAutoConnect(true, 10000);

    }

}


4. Simple reading data from PLC

using System;

using PLCcom;

using System.Windows.Forms;

namespace CodeDokuCSharp

{

    class newClass

    {

        PLCcomDevice Device;

 

        private void btnRead_Click(object sender, EventArgs e)

        {

            //declare a ReadRequest object

            //set the request parameters

            //read 10 Bytes from DB100

            ReadDataRequest myReadRequest = new ReadDataRequest(eRegion.DataBlock, 100, 0, eDataType.BYTE, 10);

 

            //read from device

            ReadDataResult res = Device.ReadData(myReadRequest);

 

            //evaluate results

            txtMessage.Text = res.Message;

            if (res.Quality == OperationResult.eQuality.GOOD)

            {

                foreach (byte b in (byte[])res.GetValues())

                {

                    txtResult.Text += b.ToString() + Environment.NewLine;

                }

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res.Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

    }

}


Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/


Contoh Mengakses PLC Dengan Java - IV

 


13. Start and stop a PLC

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    //Start PLC

    private void btnwriteRawDataActionPerformed(java.awt.event.ActionEvent evt) {

 

        //execute function

        OperationResult res = Device.StartPLC();

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

     

    //Stop PLC

    private void btnwriteRawDataActionPerformed(java.awt.event.ActionEvent evt) {

 

        //execute function

        OperationResult res = Device.StopPLC();

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


14. Reading block list from PLC

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btngetPLCBlockListActionPerformed(java.awt.event.ActionEvent evt) {

 

        eBlockType BlockType = eBlockType.AllBlocks;

        BlockListResult res = Device.GetBlockList(BlockType);

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            StringBuilder sb = new StringBuilder();

            for (BlockListEntry ble : res.getBlockList()) {

                sb.append(ble.getBlockType().toString());

                sb.append(String.valueOf(ble.getBlockNumber()));

                sb.append(System.getProperty("line.separator"));

            }

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


15. Get length of block

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btnBlockLenActionPerformed(java.awt.event.ActionEvent evt) {

 

        //get Len from DB100

        int BlockNumber = 100;

        eBlockType BlockType = eBlockType.AllBlocks;

 

        //evaluate results

        BlockListLengthResult res = Device.GetBlockLenght(BlockType, BlockNumber);

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            StringBuilder sb = new StringBuilder();

            sb.append(res.getBlockType().toString());

            sb.append(String.valueOf(res.getBlockNumber()));

            sb.append(" Len:");

            sb.append(String.valueOf(res.getBlockLength()));

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


16. Backup block

import PLCCom.*;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import javax.swing.JFileChooser;

import javax.swing.JOptionPane;

import javax.swing.filechooser.FileFilter;

import javax.swing.filechooser.FileNameExtensionFilter;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btnBackup_BlockActionPerformed(java.awt.event.ActionEvent evt) {

 

        //Backup OB1

        int BlockNumber = 1;

        eBlockType BlockType = eBlockType.OB;

 

        //open SaveFileDialog

        final JFileChooser dr = new JFileChooser();

        FileFilter filter = new FileNameExtensionFilter("Binary Files *.mc7", "mc7");

        dr.addChoosableFileFilter(filter);

        int returnVal = dr.showSaveDialog(this);

        if (returnVal == JFileChooser.APPROVE_OPTION) {

            //read Block into ReadPLCBlockResult

            ReadPLCBlockResult res = Device.ReadPLCBlock_MC7(BlockType, BlockNumber);

 

            //evaluate results

            if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

                try {

                    //save buffer in specified file

                    File file = new File(dr.getSelectedFile().getAbsolutePath());

 

                    //rename file to .mc7, you can adjust the extension

                    if (!file.getAbsolutePath().endsWith(".mc7")) {

                        file = new File(dr.getSelectedFile().getAbsolutePath() + ".mc7");

                    }

                    // if file doesn´t exists, then create it

                    if (!file.exists()) {

                        file.createNewFile();

                    }

                    FileOutputStream fs = new FileOutputStream(file);

                    fs.write(res.getBuffer());

                    fs.close();

                    JOptionPane.showMessageDialog(null, "Block " + String.valueOf(String.valueOf(BlockType)) + String.valueOf(BlockNumber) + resources.getString("successful_saved") + dr.getSelectedFile().getName(), "", JOptionPane.INFORMATION_MESSAGE);

                } catch (IOException ex) {

                    JOptionPane.showMessageDialog(null, "operation unsuccessful", "", JOptionPane.ERROR_MESSAGE);

                }

                JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

            } else {

                JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

            }

        } else {

            JOptionPane.showMessageDialog(null, "operation aborted", "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


17. Restore block

import PLCCom.*;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import javax.swing.JFileChooser;

import javax.swing.JOptionPane;

import javax.swing.filechooser.FileFilter;

import javax.swing.filechooser.FileNameExtensionFilter;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btnRestore_BlockActionPerformed(java.awt.event.ActionEvent evt) {

        final JFileChooser dr = new JFileChooser();

        FileFilter filter = new FileNameExtensionFilter("Binary Files *.mc7, *.bin", "mc7", "bin");

        dr.addChoosableFileFilter(filter);

        int returnVal = dr.showOpenDialog(this);

        if (returnVal == JFileChooser.APPROVE_OPTION) {

            try {

                File file = new File(dr.getSelectedFile().getAbsolutePath());

                if (!file.exists()) {

                    JOptionPane.showMessageDialog(null, "operation unsuccessful, file not exist", "", JOptionPane.ERROR_MESSAGE);

                    return;

                }

                InputStream is = null;

                byte[] buffer = null;

                try {

                    is = new BufferedInputStream(new FileInputStream(file));

                    buffer = new byte[is.available()];

                    is.read(buffer);

                } finally {

                    is.close();

                }

                WritePLCBlockRequest Requestdata = new WritePLCBlockRequest(buffer);

                //Write Buffer into PLC

                OperationResult res = Device.WritePLCBlock_MC7(Requestdata);

 

                //evaluate results

                if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

                    JOptionPane.showMessageDialog(null, "Block " + String.valueOf(Requestdata.getBlockInfo().getHeader().getBlockType()) + String.valueOf(Requestdata.getBlockInfo().getHeader().getBlockNumber()) + "successful saved in PLC! File:" + dr.getSelectedFile().getName(), "", JOptionPane.INFORMATION_MESSAGE);

                } else {

                    JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

                }

            } catch (IOException ex) {

                JOptionPane.showMessageDialog(null, "operation unsuccessful", "", JOptionPane.ERROR_MESSAGE);

            }

        } else {

            JOptionPane.showMessageDialog(null, "operation aborted", "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


18. Delete block

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btnDeleteBlockActionPerformed(java.awt.event.ActionEvent evt) {

 

        //Delete DB100

        int BlockNumber = 100;

        eBlockType BlockType = eBlockType.DB;

 

        OperationResult res = Device.DeleteBlock(BlockType, BlockNumber);

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/

Contoh Mengakses PLC Dengan Java - III

 


9. Get or set PLC time

import PLCCom.*;

import java.util.Calendar;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    //read PLC time

    private void btnGetPLCTimeActionPerformed(java.awt.event.ActionEvent evt) {

 

        //execute function

        PLCClockTimeResult res = Device.GetPLCClockTime();

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            Calendar c = res.getPLCClockTime();

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

     

    //set PLC time

    private void btnSetPLCTimeActionPerformed(java.awt.event.ActionEvent evt) {

        Calendar data = new GregorianCalendar();

        //adjust and set hour

        data.set(Calendar.HOUR_OF_DAY, data.get(Calendar.HOUR_OF_DAY) - 0);

        //execute function

        OperationResult res = Device.SetPLCClockTime(data);

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

     

}


10. Reading system status list SSL

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnReadSSL_SZLActionPerformed(java.awt.event.ActionEvent evt) {

 

        // important!!! please search the id and index information in the plc-documentation

        // You must convert the specified values hex in decimal

        int SSL_ID = 306; //ID 132 (Hex)

        int SSL_Index = 4; //Index 4 (Hex)

        //execute function

        SystemStatusListResult res = Device.GetSystemStatusList(SSL_ID, SSL_Index);

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            StringBuilder sb = new StringBuilder();

            for (SystemStatusListItemEntry ssle : res.getSZLItemEntrys()) {

                for (byte b : ssle.getBuffer()) {

                    sb.append(String.valueOf(b));

                    sb.append(" ");

                }

                sb.append(System.getProperty("line.separator"));

            }

        JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


11. Get diagnostic data

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btnDiagnoseBufferActionPerformed(java.awt.event.ActionEvent evt) {

 

        //read the diagnosticinfo into DiagnosticInfoResult-object

        //execute function

        DiagnosticInfoResult res = Device.GetDiagnosticInfo();

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            //step through the entries

            StringBuilder sb = new StringBuilder();

            for (DiagnosticInfoEntry myDiagnosticInfoEntry : res.getDiagnosticInfoEntrys()) {

                sb.append("Timestamp: ");

                sb.append(myDiagnosticInfoEntry.getDiagnosticTimestamp().toString());

                sb.append(" ");

                sb.append("ID: ");

                sb.append(String.valueOf(myDiagnosticInfoEntry.getDiagnosticID()));

                sb.append(" ");

                sb.append("Message: ");

                sb.append(myDiagnosticInfoEntry.getDiagnosticText());

                sb.append(System.getProperty("line.separator"));

            }

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


12. Send password

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnsendPWActionPerformed(java.awt.event.ActionEvent evt) {

 

        OperationResult res = Device.sendPassWord("EnterPW");

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}


Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/

Contoh Mengakses PLC Dengan Java - I

 

Programmable Logic Controller, disingkat PLC merupakan peralatan elektronik yang dibangun dari mikroprosesor untuk memonitor keadaan dari peralatan input untuk kemudian di analisa sesuai dengan kebutuhan perencana (programmer) untuk mengontrol keadaan output. Sinyal input diberikan kedalam input card.
Ada 2 jenis input card, yaitu :
  • Analog input card
  • Digital input card

Contoh untuk mengakses PLC :

1. Connect to PLC

import PLCCom.*;
import javax.swing.JOptionPane;
 
public class NewClass {
 
    //declare the Device
    PLCcomDevice Device;
 
    private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
      //Connecting Device
 
        //create TCP_ISO_Device instance from PLCcomDevice
        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);
        //or create MPI_Device instance from PLCcomDevice
        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel);
        //or create PPI_Device instance from PLCcomDevice
        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);
         
        authentication.User("");//Enter User here
        authentication.Serial("");//Enter Serial here
         
        Device.setConnecttimeout(1000);
        Device.setReadtimeout(2000);
        ConnectResult res = Device.Connect();
         
        JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.OK_CANCEL_OPTION);
    }
}



import PLCCom.*;
import javax.swing.JOptionPane;
 
public class NewClass {
 
    //declare the Device
    PLCcomDevice Device;
 
    private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
      //Connecting Device
 
        //create TCP_ISO_Device instance from PLCcomDevice
        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);
        //or create MPI_Device instance from PLCcomDevice
        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel);
        //or create PPI_Device instance from PLCcomDevice
        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);
         
        authentication.User("");//Enter User here
        authentication.Serial("");//Enter Serial here
         
        Device.setConnecttimeout(1000);
        Device.setReadtimeout(2000);
        ConnectResult res = Device.Connect();
         
        JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.OK_CANCEL_OPTION);
    }
}
import PLCCom.*;
import javax.swing.JOptionPane;
 
public class NewClass {
 
    //declare the Device
    PLCcomDevice Device;
 
    private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
      //Connecting Device
 
        //create TCP_ISO_Device instance from PLCcomDevice
        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);
        //or create MPI_Device instance from PLCcomDevice
        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel);
        //or create PPI_Device instance from PLCcomDevice
        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);
         
        authentication.User("");//Enter User here
        authentication.Serial("");//Enter Serial here
         
        Device.setConnecttimeout(1000);
        Device.setReadtimeout(2000);
        ConnectResult res = Device.Connect();
         
        JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.OK_CANCEL_OPTION);
    }
}
import PLCCom.*;
import javax.swing.JOptionPane;
 
public class NewClass {
 
    //declare the Device
    PLCcomDevice Device;
 
    private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
      //Connecting Device
 
        //create TCP_ISO_Device instance from PLCcomDevice
        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);
        //or create MPI_Device instance from PLCcomDevice
        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel);
        //or create PPI_Device instance from PLCcomDevice
        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);
         
        authentication.User("");//Enter User here
        authentication.Serial("");//Enter Serial here
         
        Device.setConnecttimeout(1000);
        Device.setReadtimeout(2000);
        ConnectResult res = Device.Connect();
         
        JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.OK_CANCEL_OPTION);
    }
}
2. Disconnect from PLC

untuk memutuskan koneksi ke PLC cukup dengan 1 baris perintah : Device.DisConnect();


3. Automatic connect to PLC

import PLCCom.*;
import javax.swing.JOptionPane;
 
public class NewClass {
 
    //declare the Device
    PLCcomDevice Device;
 
    private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
      //Connecting Device
 
        //create TCP_ISO_Device instance from PLCcomDevice
        Device = new TCP_ISO_Device("192.168.1.2", 0, 2, ePLCType.S7_300_400_compatibel);
        //or create MPI_Device instance from PLCcomDevice
        //Device = new MPI_Device("COM2", 0, 2, eBaudrate.b38400, eSpeed.Speed187k, ePLCType.S7_300_400_compatibel);
        //or create PPI_Device instance from PLCcomDevice
        //Device = new PPI_Device("COM2", 0, 2, eBaudrate.b9600, ePLCType.S7_200_compatibel);
        //Enter User here
        authentication.User("");
        //Enter Serial here
        authentication.Serial("");
        Device.setConnecttimeout(1000);
        Device.setReadtimeout(2000);
         
        // Set Auto Connect State
        //The connection is opened automatically when it is needed. 
        //If after the expiry of the given period, no more requests are sent, the connection is automatically closed.
        Device.setAutoConnect(true, 10000));
    }
}


4. Simple reading data from PLC

import PLCCom.*;
 
 public class main {
 
   private void btnreadRawDataActionPerformed(java.awt.event.ActionEvent evt) {
    //set the request parameters
    //in this case => read 10 Bytes from DB1
    ReadDataRequest myReadDataRequest = new ReadDataRequest(eRegion.DataBlock,  //Region
                                                            1,                  //DB / only for datablock operations otherwise 0
                                                            0,                  //read start adress
                                                            eDataType.BYTE,     //desired datatype
                                                            10);                //Quantity of reading values
 
    //read from device
    System.out.println("begin Read...");
    ReadDataResult res = Device.readData(myReadDataRequest);
 
    //evaluate results
    if (res.Quality() == OperationResult.eQuality.GOOD) {
        int Position = 0;
        for (Object item : res.getValues()) {
            ystem.out.println("read Byte " + String.valueOf(Position) + " " + item.toString());
            Position++;
        }
    } else {
        System.out.println("read not successfull! Message: " + res.Message());
    }
 }
}



Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/

Contoh Mengakses PLC Dengan Java - II

 


5. Simple writing data to PLC

using PLCcom.*;

     

        private PLCcomDevice Device;

        //see section 'connect' for declare and connect a PLCcom-Device

 

        private void btnWrite_Click(object sender, EventArgs e)

        {

             

             

            WriteDataRequest myWriteRequest = new WriteDataRequest(eRegion.DataBlock,       // Region

                                            Integer.valueOf(100),           // DB / only for data block operations  otherwise 0

                                            Integer.valueOf(0),     // write start address

                                            Byte.valueOf(txtBit.getText()));            // Bit/only for bit operations

             

            //set the request parameters 

            //write 4 bytes in DB100

            WriteRequest[] myWriteRequest = new WriteRequest[1];

            myWriteRequest[0] = new WriteRequest();

 

            //add writable Data here

            myWriteRequest.addByte(new byte[] { 11, 12, 13, 14 });

            //write

            WriteDataResult res = Device.writeData(myWriteRequest);

 

            //evaluate results

            txtMessage.Text = DateTime.Now.ToString() + ": " + res[0].Message;

            if (res[0].Quality.Equals(OperationResult.eQuality.GOOD))

            {

                MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            else

            {

                MessageBox.Show(res[0].Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }


6. Optimized reading and writing of data

import PLCCom.*;

 

 public class main {

 //declare the Device

 private PLCcomDevice Device; //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btnOptReadWriteActionPerformed(java.awt.event.ActionEvent evt) {

 

        ReadWriteRequestSet myRequestSet = new ReadWriteRequestSet();

         

        //set optimize options

        myRequestSet.setOperationOrder(eOperationOrder.WRITE_BEVOR_READ);

        myRequestSet.setReadOptimizationMode(eReadOptimizationMode.AUTO);

        myRequestSet.setWriteOptimizationMode(eWriteOptimizationMode.CROSS_AREAS);

         

         

        // declare a ReadRequest object set the request parameters, 

        //in this case => read 10 Bytes from DB1 at Byte 0

        ReadDataRequest myReadDataRequest = new ReadDataRequest(eRegion.DataBlock, // Region

                1, // DB only for datablock operations otherwise 0

                0, // read start adress

                eDataType.BYTE, // desired datatype

                10); // Quantity of reading values

         

        // add the read request to the request set

        myRequestSet.addRequest(myReadDataRequest);

         

        // declare a WriteRequest object set the request parameters, 

        //in this case => write 4 bytes to DB100 at address 0

        WriteDataRequest myWriteRequest = new WriteDataRequest(eRegion.DataBlock, // Region

                100, // DB

                0); // startaddress

         

        // add writable Data here

        // in this case => write 4 bytes in DB100

        myWriteRequest.addByte(new byte[] { 11, 12, 13, 14 });

         

        // add the write request to the request set

        myRequestSet.addRequest(myWriteRequest);

         

        // ....... add more requests to request set

         

        // read, write and getting the results

        ReadWriteResultSet results = Device.readWriteData(myRequestSet);

         

        // evaluate the results of read operations...

        for (ReadDataResult res : results.getReadDataResults()) {

            // for getting read results see chapter simple read

        }

         

        // ...and evaluate the results of write operations

        for (WriteDataResult res : results.getWriteDataResults()) {

            // for getting write results see chapter simple write

        }

 

    }

 }


7. Get basic info from PLC

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btngetPLCBasicInfoActionPerformed(java.awt.event.ActionEvent evt) {

        //execute function

        BasicInfoResult res = Device.GetBasicInfo();

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            StringBuilder sb = new StringBuilder();

            sb.append("Device Name: ");

            sb.append(res.Name());

            sb.append(System.getProperty("line.separator"));

            sb.append("Order Number: ");

            sb.append(res.Ordernumber());

            sb.append(System.getProperty("line.separator"));

            sb.append("Module Version: ");

            sb.append(res.ModuleVersion());

            sb.append(System.getProperty("line.separator"));

            sb.append("Firmware Version: ");

            sb.append(res.FirmwareVersion());

            sb.append(System.getProperty("line.separator"));

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}



8. Get mode and state from CPU

import PLCCom.*;

import javax.swing.JOptionPane;

 

public class NewClass {

 

    PLCcomDevice Device;

    //see section 'connect' for declare and connect a PLCcom-Device

 

    private void btngetCPUModeActionPerformed(java.awt.event.ActionEvent evt) {

        //execute function

        CPUModeInfoResult res = Device.GetCPUMode();

 

        //evaluate results

        if (res.Quality().equals(OperationResult.eQuality.GOOD)) {

            StringBuilder sb = new StringBuilder();

            sb.append("CPU Mode = ");

            sb.append(String.valueOf(res.CPUModeInfo()));

            sb.append(System.getProperty("line.separator"));

            sb.append("CPU State = ");

            sb.append(String.valueOf(res.CPUStateInfo()));

            JOptionPane.showMessageDialog(null, "OK", "", JOptionPane.INFORMATION_MESSAGE);

        } else {

            JOptionPane.showMessageDialog(null, res.Message(), "", JOptionPane.ERROR_MESSAGE);

        }

    }

}



Reference : https://www.plccom.net/en/plccom/for-s7/fors7-code-examples/


Memunculkan Simbol & Emoji Pada OS Mac

  Memunculkan Simbol & Emoji  1. Buka aplikasi Pages / Notes pada Macbook. 2. Klik pada Menubar Edit --> Pilih Emoji and Symbols a...