瀏覽代碼

更换新PLC协议dll,修改心跳写入方式,可稳定运行

yc_t 6 年之前
父節點
當前提交
ac8c6d41c7

+ 18 - 25
PLCLinker/centralController/Monitor/SystemInitializer.cs

@@ -201,14 +201,26 @@ namespace Monitor
                         Int32.Parse(Monitor.plcDatablockConfig[0]), Int32.Parse(Monitor.plcDatablockConfig[1]), Int32.Parse(Monitor.plcDatablockConfig[2]),
                         Monitor.plcTerminalCount, Monitor.plcParkingSpaceCount);
                 }
+                //启动心跳进程
+                Thread heartbeatThread = new Thread(()=> {
+                    while (!Monitor.isClosing)
+                    {
+                        if (Monitor.PLC != null && Monitor.PLC.isConnected)
+                        {
+                            Random rnd = new Random();
+                            MainBlockStru mbs = new MainBlockStru();
+                            mbs.centralHearbeat = (short)rnd.Next(100, 999);
+                            mbs.licenseReceived = (short)-1;
+                            mbs.bookParkCmd = (short)-1;
+                            mbs.bookFetchCmd = (short)-1;
+                            Monitor.PLC.WriteToPLC(mbs, PLCDataType.central);
+                        }
+                        Thread.Sleep(500);
+                    }
+                });
+                heartbeatThread.Start();
                 if (Monitor.PLC.isConnected)
                 {
-                    Random rnd = new Random();
-                    //启动心跳进程
-                    System.Windows.Forms.Timer heartbeatTimer = new System.Windows.Forms.Timer();
-                    heartbeatTimer.Interval = 500;
-                    heartbeatTimer.Tick += new EventHandler(CentralHeartbeat);
-                    heartbeatTimer.Start();
                     return true;
                 }
                 else { Monitor.PLC.PLCConnect(); }
@@ -216,25 +228,6 @@ namespace Monitor
             return false;
         }
 
-        private void CentralHeartbeat(object sender, EventArgs e)
-        {
-            Random rnd = new Random();
-            if (Monitor.PLC.isConnected)
-            {
-                MainBlockStru mbs = new MainBlockStru();
-                List<object> list = Monitor.PLC.ReadFromPLC(PLCDataType.central, 0);
-                if (list!=null && list.Count != 0)
-                {
-                    mbs = (MainBlockStru)list[0];
-                    mbs.centralHearbeat = (short)rnd.Next(100, 999);
-                    mbs.licenseReceived = (short)-1;
-                    mbs.bookParkCmd = (short)-1;
-                    mbs.bookFetchCmd = (short)-1;
-                    Monitor.PLC.WriteToPLC(mbs, PLCDataType.central);
-                }
-            }
-        }
-
         /// <summary>
         /// 初始化更新广告
         /// </summary>

二進制
PLCLinker/centralController/sdk/PLC/PLCS7.dll


+ 65 - 1
PLCLinker/centralController/sdk/PLC/PLCS7.xml

@@ -59,7 +59,54 @@
             PLC S7连接对象
             </summary>
         </member>
-        <member name="M:PLCS7.PLCLinker.#ctor(S7.Net.CpuType,System.String,System.Int16,System.Int16,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
+        <member name="F:PLCS7.AbstractPLCLinker.writingBlockingCollection">
+            <summary>
+            用于将写PLC指令排队的阻塞队列
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.writeThread">
+            <summary>
+            写线程,控制PLC写入频率
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.closed">
+            <summary>
+            系统关闭
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.readWriteLock">
+            <summary>
+            读写锁
+            </summary>
+        </member>
+        <member name="M:PLCS7.AbstractPLCLinker.PLCConnect">
+            <summary>
+            连接
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.AbstractPLCLinker.PLCDisconnect">
+            <summary>
+            断开连接
+            </summary>
+        </member>
+        <member name="M:PLCS7.AbstractPLCLinker.ReadFromPLC(PLCS7.PLCDataType,System.Int32)">
+            <summary>
+            读PLC
+            </summary>
+            <param name="whichToRead"></param>
+            <param name="index"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.AbstractPLCLinker.WriteToPLC(System.Object,PLCS7.PLCDataType)">
+            <summary>
+            写PLC
+            </summary>
+            <param name="abstractPLCMsg"></param>
+            <param name="whoami"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.#ctor(snap7Enc.CpuType,System.String,System.Int16,System.Int16,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
             <summary>
             PLCLinker构造函数
             </summary>
@@ -106,6 +153,12 @@
             <param name="db"></param>
             <param name="startAddr"></param>
         </member>
+        <member name="M:PLCS7.PLCLinker.WriteAccordingly">
+            <summary>
+            从阻塞队列获取需写入PLC数据并写入PLC,时间间隔在线程中控制
+            </summary>
+            <returns></returns>
+        </member>
         <member name="M:PLCS7.PLCLinker.ReadFromPLC(PLCS7.PLCDataType,System.Int32)">
             <summary>
             读取PLC数据块
@@ -122,6 +175,17 @@
             <param name="whoami"></param>
             <returns></returns>
         </member>
+        <member name="M:PLCS7.PLCLinker.PLCConnect">
+            <summary>
+            连接PLC
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.PLCDisconnect">
+            <summary>
+            关闭PLC连接
+            </summary>
+        </member>
         <member name="M:PLCS7.PLCLinker.WriteAccordingToOffset(PLCS7.PLCDataType,System.Int32,System.Object)">
             <summary>
             根据地址偏移量写入PLC

二進制
PLCLinker/centralController/sdk/PLC/snap7Enc.dll