로봇즉 깍기기술 로봇의 외간을 움직이며 깍음

Robot = LMOB #po 이렇게 코드를 부른다

 

로봇이 아닌 깍는 기계를 이용하여 만드는 기계

CNC = Goo #po 이렇게 코드를 부른다

 

 

 

1. 컴파일러 인터프린터 책

 

EMBEDDED RECIPES

 

 

http://recipes.egloos.com/

 

임베디드 레시피

친절한 임베디드 개발자되기 강좌

recipes.egloos.com

DLL (Dynamioc Linking Library)

DLL 만들고 사용하기 

 

 

용접할때는 노이즈가 많이 발생한다 ???

이유는 모르겠지만 그래서 노이즈 방어 선을 많이 쓴다

 

 

nModbus_API_Manual_v1.2_en.pdf
0.77MB

https://docs.microsoft.com/ko-kr/dotnet/api/system.io.ports.serialport?view=netframework-4.8

 

SerialPort 클래스 (System.IO.Ports)

 

직렬 포트 리소스를 나타냅니다.Represents a serial port resource.

docs.microsoft.com

두개를 참조하면 공부하기 쉬워진다

 

 

##########

1.일단 추가해야 할 것들이있다

 

여기를 보고 참조하길 바란다

http://comfilewiki.co.kr/ko/doku.php?id=comfilepi:nmodbus4_k:index

 

comfilepi:nmodbus4_k:index [Comfile Technology's Online Documentation]

NModbus4 사용법 산업현장에서 많이 사용하고 있는 MODBUS 프로토콜을 ComfilePi에서 동작시키는 방법을 알아보겠습니다. Nmodbus4 라이브러리를 이용하면 쉽고 간단하게 MODBUS프로토콜을 구현할 수 있습니다. ComfilePi와 PLC 결선 ComfilePi의 RS232 COM0와 PLC의 RS232 포트에 TX-RX, RX-TX, GND-GND로 연결합니다. ComfilePi와 PLC의 RS232 결선은 아래와 같습니다. ※PLC는

comfilewiki.co.kr

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

using Xisom.Scada.Browser;
using Xisom.Scada.Core;
using Xisom.Scada.Model;

using Modbus.Device;
using System.IO.Ports;
using Modbus.Utility;
using System.Windows.Forms.DataVisualization.Charting;

namespace XiSOM_DLL_APP
{
    public partial class Form1 : Form
    {

        byte[] PVTable = new byte[30] { 0,0,0,0,0,0,0,0,0,0,
                                        0,0,0,0,0,0,0,0,0,0,
                                        0,0,0,0,0,0,0,0,0,0};
        byte pvCounter = 0;
        public const byte MAX_PVCOUNT = 30;

        private SerialPort serialPort = null;
        public Form1()
        {
            InitializeComponent();
          
        }
        const int SLAVE_ADDRESS = 1;

        #region 호출 함수루틴
         private void Form1_Load(object sender, EventArgs e)
        {
 
            chart1.Series.Clear();
            Series sPVValue = chart1.Series.Add("PV Value");
            sPVValue.ChartType = SeriesChartType.Line;

             try
            {
                serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);  //온도 조절기 매칭
                serialPort.Open();

                ReadOnceData();
                timer1.Enabled = true;
                timer1.Interval = 1000;
                timer1.Start();

            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
        private void ReadOnceData()
        {
            IModbusMaster masterRTU = ModbusSerialMaster.CreateRtu(serialPort);
            const ushort SLAVE_REGISTER = 0;
            const ushort SLAVE_POINT = 7;
            try
            {
                ushort[] result = masterRTU.ReadHoldingRegisters(1, SLAVE_REGISTER, SLAVE_POINT);
                textBox3.Text = string.Empty;
                foreach (ushort item in result)
                {
                    textBox3.Text += string.Format("{0}/", item);
                }
                string[] array = textBox3.Text.Split('/');
                textBox1.Text = array[2].Insert(array[1].Length - 1, ".");   //SV 
                textBox2.Text = array[1].Insert(array[2].Length - 1, ".");   //PV
            }
            catch (Exception ex)
            {
                ReportError(ex.Message);
            }
        }

        void ReportError(string s)
        {
            MessageBox.Show(s);
        }
        private void SendReadholdingRegisterPV()
        {
            IModbusMaster masterRTU = ModbusSerialMaster.CreateRtu(serialPort);
            try
            {
                ushort[] result = masterRTU.ReadHoldingRegisters(1, 1, 1);
                textBox2.Text = string.Format("{0}", result[0]);
                textBox2.Text = textBox2.Text.Insert(textBox2.Text.Length - 1, ".");
                //result값을 저장하고 나서 
                PVTable[pvCounter++] = (byte)(result[0]);  //나누기 10없이 그대로 찍음
            }
            catch (Exception ex)
            {
                ReportError(ex.Message);
            }
        }
        #endregion

        #region 작성된 폼만의 타이머 통신 쓰기명령
        private void button2_Click(object sender, EventArgs e)
        {
            IModbusMaster masterRTU = ModbusSerialMaster.CreateRtu(serialPort);
            try
            {
                ushort[] result = masterRTU.ReadHoldingRegisters(1, 1, 1);
                //bool[] result = _modbusMaster.ReadCoils(SLAVE_ADDRESS, 2, 1);
                //if (result[0] != 0)
                //{
                //    textBox1.Text = "ON";
                //}
                //else
                //{
                //    textBox1.Text = "OFF";
                //}
                textBox2.Text = string.Format("{0}", result[0]);
                textBox2.Text = textBox2.Text.Insert(textBox2.Text.Length - 1, ".");
            }
            catch (Exception ex)
            {
                ReportError(ex.Message);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                IModbusMaster masterRTU = ModbusSerialMaster.CreateRtu(serialPort);
                string t = textBox1.Text;
                int cnt_t = t.Length - t.IndexOf('.') - 1;  //소수점 이하자리 카운트
                float ff = (float.Parse(textBox1.Text)) *  cnt_t;
                
                string[] st= t.Split('.');
                t = st[0] + st[1];
                
                ushort[] data = new ushort[] { Convert.ToUInt16(t)};
              
                masterRTU.WriteMultipleRegisters(1, 301, data);
            }
            catch (Exception ex)
            {
                ReportError(ex.Message);
            }
        }
        #endregion

        #region 작성된 폼만의 타이머 통신
        private void timer1_Tick(object sender, EventArgs e)
        {
            SendReadholdingRegisterPV();
            if (pvCounter >= MAX_PVCOUNT)
            {
                for (int i = 0; i < (MAX_PVCOUNT-1); i++)
                {
                    PVTable[i] = PVTable[i + 1];
                }
                pvCounter--;
            }
            chart1.Series[0].Points.DataBindY(PVTable);
        }
        #endregion
    }
}
블로그 이미지

Or71nH

,