zedgraph를 사용하여 직렬 포트에서 읽은 데이터를 플로팅하려고합니다. 나는 여전히 코드에 관심이있어, 왜 그 음모가 작동하지 않는지 추론 할 수 없다. 코드와 조언을 살펴보십시오.zedgraph (데이터 대 시간)를 사용하여 직렬 포트 데이터 플로팅
namespace WindowsApplication2
{
public partial class Form1 : Form
{
string t;
SerialPort sp;
Thread m_thread;
bool m_running = false;
ManualResetEvent m_event = new ManualResetEvent(true);
bool m_pause = false;
private GraphPane myPane;
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
// User can already search for ports when the constructor of the FORM1 is calling
// And let the user search ports again with a click
// Searching for ports function
SearchPorts();
CreateZedGraph(); //error : Severity Code Description Project File Line Suppression State
//Error CS7036 There is no argument given that corresponds to the required formal parameter
//'w' of 'Form1.DrawPoint(ZedGraphControl, int, PointPair)'
}
// start button
private void btnStart_Click(object sender, EventArgs e)
{
if (m_thread == null || m_thread.IsAlive == false)
{
ClearGraph();
m_thread = new Thread(Process);
m_thread.Start();
}
}
void Process()
{
PointPair point = new PointPair();
btnStart.Enabled = false;
btnStop.Enabled = true;
m_running = true;
while (m_running == true)
{
m_event.WaitOne();
point.Y = Convert.ToDouble(serialPort1);
point.X++; //time instance of measurement??
DrawPoint(zed1, point);
ssData.Value = point.Y.ToString();
RefresheZedGraphs(zed1);
Thread.Sleep(700);
}
btnStart.Enabled = true;
}
private void CreateZedGraph(object sender, SerialDataReceivedEventArgs e, ZedGraphControl zgc)
{
myPane = zgc.GraphPane;
// axes stuff
myPane.Title.Text = "FRDM-KW40z serial Test";
myPane.XAxis.Title.Text = "Time";
myPane.YAxis.Title.Text = "Voltage";
myPane.XAxis.MajorGrid.IsVisible = true;
myPane.YAxis.MajorGrid.IsVisible = true;
myPane.XAxis.MinorGrid.IsVisible = true;
myPane.YAxis.MinorGrid.IsVisible = true;
// data from serial port
PointPairList list = new PointPairList();
zed1.GraphPane.AddCurve("Test", list, Color.Red);
}
열고 직렬 포트에서 읽기 위해, 나는 combox 버튼의 몇 가지를 사용하는 (그리고 나중에 내가 텍스트 파일로 저장하려고);
private void button2_Click(object sender, EventArgs e)
{
comboBox1.Items.Clear();
SearchPorts();
}
void SearchPorts()
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
comboBox1.Items.Add(port);
}
}
private void button3_Click(object sender, EventArgs e)
{
// Catch exception if it will be thrown so the user will see it in a message box
OpenCloseSerial();
}
void OpenCloseSerial()
{
try
{
if (sp == null || sp.IsOpen == false)
{
t = comboBox1.Text.ToString();
sErial(t);
button3.Text = "Close Serial port"; // button text
}
else
{
sp.Close();
button3.Text = "Connect and wait for inputs"; // button text
}
}
catch (Exception err) // catching error message
{
MessageBox.Show(err.Message); // displaying error message
}
}
void sErial(string Port_name)
{
try
{
sp = new SerialPort(Port_name, 115200, Parity.None, 8, StopBits.One); // serial port parameters
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
sp.Open();
}
catch (Exception err)
{
throw (new SystemException(err.Message));
}
}
private void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
// This below line is not need , sp is global (belongs to the class!!)
//SerialPort sp = (SerialPort)sender;
if (e.EventType == SerialData.Chars)
{
if (sp.IsOpen)
{
string w = sp.ReadExisting();
if (w != String.Empty)
{
Invoke(new Action(() => Control.Update(w)));
}
}
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (sp == null || sp.IsOpen == false)
{
OpenCloseSerial();
}
}
플롯이 업데이트되지 않습니다! 나는 왜 그런지 추측 할 수 없다. 제 접근법이나 코드에 실수가 있으면 알려주세요. 다음에서 오류가 발생합니다. Invoke (새 Action (() => Control.Update (w))); 그 후에 그래프를 업데이트 할 수있게하려고 할 때.
다시 오류가 있습니다. DrawPoint (zed1, point); 감사합니다. 좋은 날.
건배, 램.
답장을 보내 주셔서 감사합니다. 나는 완전히 이해할 수 없다. 설명해 주시겠습니까? 아니면 나를 도울 수있는 모범이 있습니까? 좋은 날. –
@ Ram.V 이해할 수없는 부분은 무엇입니까? 'serialPortData'를 얻을 수 있었습니까? – HebeleHododo
나는 지금 그럴 수 없었다. 이전에는 zedgraph가 아닌 richtextbox가 있었고 com 포트에서 데이터를 읽을 수있었습니다. 하지만 이제 zipgraph로 richtextbox를 대체하기 시작했습니다. 그것은 복잡합니다. 나는 더 잘 이해하려고 노력하고있다. 그러나 며칠 후에 나는 아마도 차트로 돌아설 것이다. 너의 충고를 다시 알려줘. 좋은 날. –