로봇즉 깍기기술 로봇의 외간을 움직이며 깍음
Robot = LMOB #po 이렇게 코드를 부른다
로봇이 아닌 깍는 기계를 이용하여 만드는 기계
CNC = Goo #po 이렇게 코드를 부른다
1. 컴파일러 인터프린터 책
EMBEDDED RECIPES
DLL (Dynamioc Linking Library)
DLL 만들고 사용하기
용접할때는 노이즈가 많이 발생한다 ???
이유는 모르겠지만 그래서 노이즈 방어 선을 많이 쓴다
https://docs.microsoft.com/ko-kr/dotnet/api/system.io.ports.serialport?view=netframework-4.8
두개를 참조하면 공부하기 쉬워진다
##########
1.일단 추가해야 할 것들이있다
여기를 보고 참조하길 바란다
http://comfilewiki.co.kr/ko/doku.php?id=comfilepi:nmodbus4_k:index
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
}
}
'[ 충남인력개발원 ] (2019) > ┗C#' 카테고리의 다른 글
8일차 모스키토 사용 (0) | 2020.04.16 |
---|---|
6일차 C#과 ModBus (0) | 2020.04.13 |
4일차 Fuction 3 코드 해석 (0) | 2020.04.09 |
3일차 코드 모두버스의 대하여 (0) | 2020.04.08 |
1일차 C# 윈폼 EXCEL 데이터 컴파일 (0) | 2020.02.24 |