0

私は Entity Framework を使用するように強制し始めたばかりですが (私はかなり遅れていることを知っています)、最初のハードルで落ちました。

私が書いているプログラムは、PLC が true になるのを少しだけ監視するだけです。true になるとイベントが発生し、値 (現時点ではランダム) が SQL に入力されます。次に、ビットを false に設定します。

私が抱えている問題は、イベントが 1 回発生し、エントリが追加され、ビットが false に設定されることです。ただし、イベントが再びトリガーされることはありません。すべての SQL ビットをコメントアウトし、ビットを false に設定すると、完全に機能し、複数回起動します。

これが私が持っているほとんどのコードです。

どんな助けでも本当に感謝しています。

static void Main(string[] args)
{
    PlcListener plcListener = new PlcListener();
    plcLister.BitChanged += (bitVal) => On_BitChanged(bitVal, plcListener)
    plcListner.Start();
}

private static void On_BitChanged(bool bitVal, PlcListener plcListner)
{
    SqlEntities sqlEntity = new SqlEntities();
    SampleData sampleData = new SampleData(){ Data = new Random().Next(); };

    sqlEntity.AddToSampleDatas(sampleData);
    sqlEntity.SaveChanges();

    plcListener.Confirm();
}



public class PlcListener
{
    public void Start()
    {
        OPCServer opcServer = new OPCServer();
        opcServer.DataChanged += On_DataChanged;
    }

    public void Confirm()
    {
        //Code to set bit to false
    }

    public void On_DataChanged(bool bitVal.......)
    {
        if(bitVal)
        {
            BitChangedEventHandler handler = BitChanged;
            if (handler != null)
            {
               handler(bitVal);
            }
        }
    }

    public delegate void BitChangedEventHandler(bool bitValue);
    public event BitChangedEventHandler BitChanged;
}
4

1 に答える 1

0

使用している OpcServer コンポーネントについては言及していませんが、最も可能性の高い問題は、DataChange が COM コールバック スレッドでアプリケーションに入り、コールバックの処理中に COM に書き戻すことができないことです。着信値を記録し、独自のハンドラー スレッドで実際の処理を行うだけで済みます。これにより、PLC でビットが false に戻されます。

于 2013-02-21T17:39:09.660 に答える