現有一wpf程式,通過MPI通訊協議 連接西門子PLC300
連接成功后 開啟2個執行緒監聽兩個M地址的值是否為true,如果為true則向本地資料庫插入資料,
監聽時間M1地址2秒,M2地址5秒
連接PLC成功后
isThreadRunFZ = true;
threadFZ = new Thread(ThreadReadServerFZ);
threadFZ.IsBackground = true;
threadFZ.Start();
isThreadRunZL = true;
threadZL = new Thread(ThreadReadServerZL);
threadZL.IsBackground = true;
threadZL.Start();
======================================================
private void ThreadReadServerZL()
{
while (isThreadRunZL)
{
Thread.Sleep(timeSleepZL);//2秒
try
{
bool saveType = false;
DCProdave.GetMBitData(150, 0, ref saveType);
if (saveType)//如果M地址值為true
{
Dispatcher.Invoke(new Action<short>(AddDataCurve), (short)1);//執行資料庫插入方法
}
}
catch (Exception ex)
{
return;
//MessageBox.Show("讀取失敗1:" + ex.Message);
}
}
}
private void ThreadReadServerFZ()
{
while (isThreadRunFZ)
{
Thread.Sleep(timeSleepFZ);//5秒
try
{
bool saveTypeFZ = false;
DCProdave.GetMBitData(42, 0, ref saveTypeFZ);
if (saveTypeFZ)
{
if (PitNoFZ == "")
{
。。。訪問webservice得到回傳值。。
}
Dispatcher.Invoke(new Action<string>(AddDataCurveFZ), PitNoFZ);//插入資料庫
}
else
{
。。。。。
}
}
catch (Exception ex)
{
//return;
//MessageBox.Show("讀取失敗2:" + ex.Message);
}
}
}
========================================================================
一直監聽,只要點了wincc上某個按鈕,改變M地址值,我就向資料庫插入資料。
可是運行一會就程式崩潰。。根本就不catch任何錯誤,直接“xxx應用程式已停止作業” 欲哭無淚啊。。。。
uj5u.com熱心網友回復:
看下windows日志分析一下uj5u.com熱心網友回復:
日志分析是讀取M地址報錯,難道是讀取頻率太快,而MPI只支持低頻率?Application: WpfApp1.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at Model_DAL_SQLHelper.DCProdave.mb_bittest(Int32, Int32, Byte ByRef)
at Model_DAL_SQLHelper.DCProdave.GetMBitData(Int32, Int32, Boolean ByRef)
at WpfApp1.MainWindow.ThreadReadServerZL()
at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
uj5u.com熱心網友回復:
at Model_DAL_SQLHelper.DCProdave.mb_bittest(Int32, Int32, Byte ByRef)//讀取M地址at Model_DAL_SQLHelper.DCProdave.GetMBitData(Int32, Int32, Boolean ByRef)//讀取M地址
at WpfApp1.MainWindow.ThreadReadServerZL() //執行緒
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/155205.html
標籤:ASP.NET
下一篇:求助,急!
