DigitalIndicator 프로젝트, 인가된 포트 목록
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.IO.Ports;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@@ -24,17 +25,26 @@ namespace DigitalIndicator
|
||||
|
||||
private void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
string[] ports = GetAvailablePorts();
|
||||
cmbIndiport.Items.Clear();
|
||||
cmbIndiport.Items.AddRange(ports);
|
||||
|
||||
timer1.Start();
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
private static string[] GetAvailablePorts()
|
||||
{
|
||||
if (tbport.Text.isEmpty())
|
||||
return SerialPort.GetPortNames();
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{ // 연결/끊기
|
||||
if (cmbIndiport.Text.isEmpty())
|
||||
{
|
||||
UTIL.MsgE("포트번호를 입력하세요");
|
||||
return;
|
||||
}
|
||||
if (int.TryParse(tbbaud.Text, out int port) == false)
|
||||
if (int.TryParse(tbbaud.Text, out int baud) == false)
|
||||
{
|
||||
UTIL.MsgE("baud rate 값을 입력하세요\n(기본:9600)");
|
||||
return;
|
||||
@@ -49,10 +59,14 @@ namespace DigitalIndicator
|
||||
}
|
||||
else
|
||||
{
|
||||
dev.PortName = this.tbport.Text;
|
||||
dev.PortName = this.cmbIndiport.Text;
|
||||
dev.BaudRate = baud;
|
||||
dev.DataBits = 8; // 데이터 비트
|
||||
dev.Parity = System.IO.Ports.Parity.None;
|
||||
dev.StopBits = System.IO.Ports.StopBits.One;
|
||||
dev.ReadTimeout = 2000;
|
||||
dev.WriteTimeout = 2000;
|
||||
|
||||
try
|
||||
{
|
||||
dev.Open();
|
||||
@@ -78,7 +92,7 @@ namespace DigitalIndicator
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
{ // 쓰기
|
||||
if (Int32.TryParse(this.textBox1.Text, out int value) == false)
|
||||
{
|
||||
UTIL.MsgE("숫자로 입력하세요");
|
||||
@@ -92,16 +106,23 @@ namespace DigitalIndicator
|
||||
|
||||
var valuebuffer = splitI32(value);
|
||||
var slave = (byte)numericUpDown1.Value;
|
||||
modbus.WriteMultipleRegisters(slave, 0, valuebuffer); //ADDRESS 0=40001
|
||||
try
|
||||
{
|
||||
modbus.WriteMultipleRegisters(slave, 0, valuebuffer); //ADDRESS 0=40001
|
||||
}
|
||||
catch (System.TimeoutException ex)
|
||||
{
|
||||
UTIL.MsgE(ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
UInt16[] splitI32(Int32 value)
|
||||
{
|
||||
var hValue = (UInt16)(value >> 16);
|
||||
var lValue = (UInt16)(value & 0xFFFF);
|
||||
return new ushort[] { hValue, lValue };
|
||||
UInt16[] splitI32(Int32 value) // 0 ~ 65535
|
||||
{ // 32비트 정수(Int32) --> 2개(상위/하위)의 16비트 부호 없는 정수(UInt16)로 분할
|
||||
var hValue = (UInt16)(value >> 16); // 오른쪽으로 16비트 시프트하여 상위 16비트를 추출
|
||||
var lValue = (UInt16)(value & 0xFFFF); // (0xFFFF = 16비트의 모든 비트가 1인 값)와의 비트 AND 연산을 수행하여 하위 16비트를 추출
|
||||
return new ushort[] { hValue, lValue }; // 16비트 부호없는 정수 배열을 반환 (UInt16 = ushort)
|
||||
}
|
||||
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user