Quellcode durchsuchen

添加开机启动及使用说明

zhaowei vor 4 Jahren
Ursprung
Commit
7173cfb912
8 geänderte Dateien mit 59 neuen und 123 gelöschten Zeilen
  1. 0 69
      AutoStartTask.cs
  2. 25 36
      MainForm.cs
  3. 10 13
      SIASUN.TwinCatLogger.csproj
  4. 2 2
      SIASUN.TwinCatLogger.sln
  5. 1 3
      app.config
  6. 15 0
      使用说明.txt
  7. 3 0
      删除开机自动启动.bat
  8. 3 0
      添加开机自动启动.bat

+ 0 - 69
AutoStartTask.cs

@@ -1,69 +0,0 @@
-using System;
-using System.Windows.Forms;
-using TaskScheduler;
-
-namespace SIASUN.TwinCatLogger
-{
-    static class AutoStartTask
-    {
-        // 创建开机登陆后启动的计划任务
-        static public void CreateLogonTask(bool autoStart)
-        {
-            //取得程序路径
-            string startup = Application.ExecutablePath;
-            //程序名称
-            string appname = Application.ProductName;
-            try
-            {
-                //新建任务
-                TaskSchedulerClass scheduler = new TaskSchedulerClass();
-                //连接
-                scheduler.Connect(null, null, null, null);
-                //获取创建任务的目录
-                ITaskFolder folder = scheduler.GetFolder("\\");
-                // 查找现有任务
-                IRegisteredTaskCollection tasks_exists = folder.GetTasks(1);
-                for (int i = 1; i <= tasks_exists.Count; i++)
-                {
-                    IRegisteredTask taski = tasks_exists[i];
-                    ITaskDefinition taskdef = taski.Definition;
-                    if (taski.Name == appname)
-                    //if (taskdef.Actions[1].Type == _TASK_ACTION_TYPE.TASK_ACTION_EXEC)
-                    //    if (((IExecAction)taskdef.Actions[1]).Path != appname)
-                    {
-                        folder.DeleteTask(appname, 0);
-                        break;
-                    }
-                }
-                // 是否开机自动启动
-                if (!autoStart) return;
-
-                //设置参数
-                ITaskDefinition task = scheduler.NewTask(0);
-                task.RegistrationInfo.Author = Application.CompanyName; //创建者
-                task.RegistrationInfo.Description = Application.ProductName; //描述
-                ILogonTrigger tt = (ILogonTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
-                tt.Delay = "PT20S";
-                //task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); //设置触发机制(此处是 登陆后)
-                IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); //设置动作(此处为运行exe程序)
-                action.Path = startup;//设置文件目录
-                action.WorkingDirectory = Application.StartupPath;
-                task.Settings.ExecutionTimeLimit = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时
-                task.Settings.DisallowStartIfOnBatteries = false;//只有在交流电源下才执行
-                task.Settings.RunOnlyIfIdle = false;//仅当计算机空闲下才执行
-
-                IRegisteredTask regTask =
-                    folder.RegisterTaskDefinition(appname, task,//此处需要设置任务的名称(name)
-                    (int)_TASK_CREATION.TASK_CREATE, null, //user
-                    null, // password
-                    _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
-                    "");
-                //IRunningTask runTask = regTask.Run(null);
-            }
-            catch (Exception exp)
-            {
-                MessageBox.Show(exp.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
-            }
-        }
-    }
-}

+ 25 - 36
MainForm.cs

@@ -46,7 +46,6 @@ namespace SIASUN.TwinCatLogger
             //{
             //    textNotice.Text = "创建开机自动启动任务失败:" + ex.Message;
             //}
-            小数位数 = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["小数位数"]);
             单文件行数 = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["单文件行数"]);
             //LogonStart.CreateLogonTask(!runInDebug);
             timer1.Interval = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["刷新时间"]);
@@ -106,7 +105,6 @@ namespace SIASUN.TwinCatLogger
 
         #region 数据
         bool runInDebug = false;
-        int 小数位数 = 0;
         int 单文件行数 = 0;
         int 当前行数 = 0;
 
@@ -149,7 +147,7 @@ namespace SIASUN.TwinCatLogger
                 return typeof(float);
             if (typename.ToUpper() == "LREAL")
                 return typeof(Double);
-            return typeof(bool);
+            return null;
         }
 
         private bool LoadPointList()
@@ -170,12 +168,13 @@ namespace SIASUN.TwinCatLogger
                         arrItem = line.Split(',');
                         if (arrItem.Length != 3)
                             continue;
-                        plcPoint.name = arrItem[0];
-                        if (!runInDebug || plcPoint.type == null)
-                        {
-                            plcPoint.address = arrItem[1];
-                            plcPoint.type = GetTypeByName(arrItem[2]);
-                        }                        
+                        plcPoint.name = arrItem[0].Trim();
+                        plcPoint.address = arrItem[1].Trim();
+                        if (plcPoint.address.Length == 0)
+                            continue;
+                        plcPoint.type = GetTypeByName(arrItem[2].Trim());
+                        if (plcPoint.type == null)
+                            continue;
                         pointList.Add(plcPoint);
                         textNotice.Text = "已从" + filePath + "读取" + pointList.Count.ToString() + "条数据定义";
                     }
@@ -251,7 +250,11 @@ namespace SIASUN.TwinCatLogger
         {
             try
             {
-                int handle = adsClient.CreateVariableHandle(varName);
+                int handle = 0;
+                if (varName.Contains("."))
+                    handle = adsClient.CreateVariableHandle(varName);
+                else
+                    handle = adsClient.CreateVariableHandle("." + varName);
                 return handle;
             }
             catch (Exception ex)
@@ -330,6 +333,7 @@ namespace SIASUN.TwinCatLogger
         }
 
         public delegate void AsyncEventHandler();
+        private static object m_Lock = new object();
 
         private string getValue(int index)
         {
@@ -347,7 +351,7 @@ namespace SIASUN.TwinCatLogger
             }
         }
 
-        private void BeginReadAllValues()
+        private void ReadAllValues()
         {
             AsyncEventHandler asy = new AsyncEventHandler(AsyncReadAllValues);
             IAsyncResult result = asy.BeginInvoke(null, asy);
@@ -360,36 +364,21 @@ namespace SIASUN.TwinCatLogger
             for (int i = 0; i < handleList.Count; i++)
             {
                 string value = getValue(i);
-                int p = value.IndexOf('.');
-                if (p > 0)
-                    line.Append("," + value.Substring(0, p + 1 + 小数位数));
-                else
-                    line.Append("," + value);
+                line.Append("," + value);
             }
-            fileWriter.WriteLine(line);
-            当前行数++;
-            if (单文件行数 > 0 && 当前行数 >= 单文件行数)
+            lock (m_Lock)
             {
-                fileWriter.Flush();
-                fileWriter.Close();
-                CreateLogFile();
+                fileWriter.WriteLine(line);
+                当前行数++;
+                if (单文件行数 > 0 && 当前行数 >= 单文件行数)
+                {
+                    fileWriter.Flush();
+                    fileWriter.Close();
+                    CreateLogFile();
+                }
             }
         }
 
-        private void ReadAllValues()
-        {
-            BeginReadAllValues();
-            //string time = DateTime.Now.ToString("HH:mm:ss.fff");
-            //fileWriter.Write(time);
-            //for (int i = 0; i < handleList.Count; i++)
-            //{
-            //    string value = adsClient.ReadAny(handleList[i], pointList[i].type).ToString();
-            //    fileWriter.Write("," + value);
-            //}
-            //fileWriter.WriteLine();
-            //fileWriter.Flush();
-        }
-
         private void button1_Click(object sender, EventArgs e)
         {
             if (isRecording)

+ 10 - 13
SIASUN.TwinCatLogger.csproj

@@ -10,7 +10,7 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>SIASUN.TwinCatLogger</RootNamespace>
     <AssemblyName>SIASUN.TwinCatLogger</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <TargetFrameworkProfile>
     </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
@@ -70,7 +70,6 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="AutoStartTask.cs" />
     <Compile Include="MainForm.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -104,17 +103,12 @@
       <DependentUpon>Settings.settings</DependentUpon>
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
     </Compile>
-  </ItemGroup>
-  <ItemGroup>
-    <COMReference Include="TaskScheduler">
-      <Guid>{E34CB9F1-C7F7-424C-BE29-027DCC09363A}</Guid>
-      <VersionMajor>1</VersionMajor>
-      <VersionMinor>0</VersionMinor>
-      <Lcid>0</Lcid>
-      <WrapperTool>tlbimp</WrapperTool>
-      <Isolated>False</Isolated>
-      <EmbedInteropTypes>False</EmbedInteropTypes>
-    </COMReference>
+    <None Include="删除开机自动启动.bat">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="添加开机自动启动.bat">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
@@ -125,6 +119,9 @@
   </ItemGroup>
   <ItemGroup>
     <Content Include="logger.ico" />
+    <Content Include="使用说明.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+ 2 - 2
SIASUN.TwinCatLogger.sln

@@ -11,8 +11,8 @@ Global
 		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{210F67CF-D0E5-42EE-98E8-AD47C8D3893A}.Debug|x86.ActiveCfg = Debug|x86
-		{210F67CF-D0E5-42EE-98E8-AD47C8D3893A}.Debug|x86.Build.0 = Debug|x86
+		{210F67CF-D0E5-42EE-98E8-AD47C8D3893A}.Debug|x86.ActiveCfg = Release|x86
+		{210F67CF-D0E5-42EE-98E8-AD47C8D3893A}.Debug|x86.Build.0 = Release|x86
 		{210F67CF-D0E5-42EE-98E8-AD47C8D3893A}.Release|x86.ActiveCfg = Release|x86
 		{210F67CF-D0E5-42EE-98E8-AD47C8D3893A}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection

+ 1 - 3
app.config

@@ -5,9 +5,7 @@
     <add key="PLC地址" value="192.168.253.128.1.1:801"/>
     <add key="启动信号" value="MAIN.axis01_abs_enable"/>
     <add key="刷新时间" value="100"/>
-    <add key="小数位数" value="3"/>
     <add key="单文件行数" value="10000"/>
-    <add key="测试模式" value="false"/>
   </appSettings>
-  <startup><supportedRuntime version="v2.0.50727"/></startup>
+  <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
 </configuration>

+ 15 - 0
使用说明.txt

@@ -0,0 +1,15 @@
+【配置文件】
+1. 点表文件:需要采集数据的名称、变量、类型,csv格式;
+2. PLC地址:倍福PLC的NetID;
+3. 启动信号:启动信号的变量,该信号为1时,记录工具将自动采集数据;
+4. 刷新时间:数据读取的间隔时间,单位为ms,实际读取间隔会略大于该值;
+5. 单文件行数:数据文件达到指定行数后,将创建新的文件;该值为0时所有数据保存到一个文件中;
+【程序使用】
+1. 双击可启动程序,程序启动后会自动尝试连接PLC;
+2. 成功PLC连接后,计时框“00:00:00”会开始闪烁,进入自动等待;
+3. 在自动等待状态下,如果启动信号=1,将开始记录数据,直到启动信号=0时停止;
+4. 在等待状态下,也可以点击开始记录按钮,手动开始记录数据,再次点击停止;
+5. 自动开始记录过程中,也可以点击按钮手动停止,停止状态时,再次点击可回到自动等待状态;
+【开机自启】
+1. 双击“添加开机自动启动.bat”,提示“操作成功完成”,则程序将开机登陆后自动启动;
+2. 双击“删除开机自动启动.bat”,提示“操作成功完成”,取消程序开机登陆后自动启动。

+ 3 - 0
删除开机自动启动.bat

@@ -0,0 +1,3 @@
+reg delete "hkcu\Software\Microsoft\Windows\CurrentVersion\Run" /v TwinCatLogger /f
+@echo off
+pause

+ 3 - 0
添加开机自动启动.bat

@@ -0,0 +1,3 @@
+reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Run" /v TwinCatLogger /t reg_sz /d %cd%\SIASUN.TwinCatLogger.exe /f
+@echo off
+pause