diff --git a/IOB-UT-NEXT/Enums.cs b/IOB-UT-NEXT/Enums.cs index b37e6631..55daad1c 100644 --- a/IOB-UT-NEXT/Enums.cs +++ b/IOB-UT-NEXT/Enums.cs @@ -323,6 +323,11 @@ namespace IOB_UT_NEXT /// MODBUS_TCP_HELPI, + /// + /// Adapter Modubus TCP versione IMAX Aeromacchine (Jetco) + /// + MODBUS_TCP_IMAX_AEROMEC, + /// /// Adapter MTConnect /// diff --git a/IOB-WIN-NEXT/AdapterForm.cs b/IOB-WIN-NEXT/AdapterForm.cs index bc6bc41b..06a3cb01 100644 --- a/IOB-WIN-NEXT/AdapterForm.cs +++ b/IOB-WIN-NEXT/AdapterForm.cs @@ -1641,6 +1641,11 @@ namespace IOB_WIN_NEXT start.Enabled = true; break; + case tipoAdapter.MODBUS_TCP_IMAX_AEROMEC: + iobObj = new IobModbusTCPImaxAeromec(this, IOBConf); + start.Enabled = true; + break; + case tipoAdapter.MTConnect: iobObj = new IobMTC(this, IOBConf); start.Enabled = true; diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.ini b/IOB-WIN-NEXT/DATA/CONF/3026.ini new file mode 100644 index 00000000..78ede1d6 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/3026.ini @@ -0,0 +1,77 @@ +;Configurazione IOB-WIN +[IOB] +;Impianto Cedax di Turi (test) - Giacovelli +CNCTYPE=MODBUS_TCP_IMAX_AEROMEC +PING_MS_TIMEOUT=1000 +MinDeltaSec=5 + +[MACHINE] +VENDOR=IMAX +MODEL=Filtro Aria + +[CNC] +IP=192.168.0.80 +PORT=502 + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +ADDR_READ=40000 +ADDR_WRITE=40000 +SIZE_READ=30 +SIZE_WRITE=0 +HR_BASE_ADDR=40000 + + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +PZCOUNT_MODE=STD.DB85.DBRE16 +DISABLE_PZCOUNT=TRUE +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +; GEST DATI DYN +ENABLE_DYN_DATA=TRUE +FORCE_DYN_DATA=TRUE +; gestione delta minimo accettabile tra min/MAX +DELTA_VAL=0.1 + +; clock base (da 10ms) +timerIntMs=10 + +; conf parametri memoria READ/WRITE +PARAM_CONF=3026.json + +NO_PING=FALSE +; conf blocchi memoria x READ +MEM_BLOCK=3026_MBlock.json +; conf aree allarme +ALARM_CONF=3026_alarm.json + +; rimozione check limiti min/max dynData +disDynDataRangeCheck=true + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.json b/IOB-WIN-NEXT/DATA/CONF/3026.json new file mode 100644 index 00000000..79e2c6c8 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/3026.json @@ -0,0 +1,77 @@ +{ + "mMapWrite": { + + }, + "mMapRead": { + "FreqInverter": { + "name": "FreqInverter", + "description": "Frequenza Inverter", + "memAddr": "40011", + "tipoMem": "Real", + "index": 11, + "size": 2, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "Hz" + }, + "CDOreManuten": { + "name": "CDOreManuten", + "description": "Residuo ore a prossimo service", + "memAddr": "40013", + "tipoMem": "Int", + "index": 13, + "size": 1, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "h" + }, + "COreTAsp1": { + "name": "COreTAsp1", + "description": "Totale ore funzionamento impianto", + "memAddr": "40014", + "tipoMem": "Int", + "index": 14, + "size": 1, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "h" + }, + "COrePAsp1": { + "name": "COrePAsp1", + "description": "Parziale ore funzionamento impianto da ultimo service", + "memAddr": "40015", + "tipoMem": "Int", + "index": 15, + "size": 1, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "h" + }, + "AmpereReale": { + "name": "AmpereReale", + "description": "Assorbimento aspiratore 1", + "memAddr": "40016", + "tipoMem": "Real", + "index": 16, + "size": 2, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "A" + } + } +} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3026_MBlock.json b/IOB-WIN-NEXT/DATA/CONF/3026_MBlock.json new file mode 100644 index 00000000..1b6d6a80 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/3026_MBlock.json @@ -0,0 +1,5 @@ +{ + "ReadBlocks": { + "40000": 30 + } +} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3026_alarm.json b/IOB-WIN-NEXT/DATA/CONF/3026_alarm.json new file mode 100644 index 00000000..e7822f36 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/3026_alarm.json @@ -0,0 +1,52 @@ +[ + { + "description": "Allarmi Impianto", + "tipoMem": "DInt", + "memAddr": "40003", + "index": 3, + "size": 2, + "messages": [ + "ALLARME VENTILATORE 1", + "ALLARME VENTILATORE 2", + "WARNING FILTRI INTASATI", + "WARNING LIVELLO FILTRO", + "ALLARME LIVELLO FILTRO", + "ALLARME TAGLIAFUOCO 1 ASPIRAZIONE ", + "ALLARME TAGLIAFUOCO 2 ASPIRAZIONE ", + "CUMULATIVO ALLARMI ALIMENTAZIONI (24V AC-DC)", + "ALLARME FUORIUSCITA IQUINANTE ", + "ALLARME TERMOVELOCIMETRICO", + "ALLARME RILEVATORE SCINTILLE", + "ALLARME SPORTELLO APERTO", + "ALLARME MOTORE VALVOLA STELLARE FILTRO", + "ALLARME MOTORE COCLEA ", + "ALLARME MOTORE VALVOLA STELLARE CALDAIA", + "ALLARME MOTORE ESTRATTORE FILTRO" + ] + }, + { + "description": "Allarmi Impianto", + "tipoMem": "DInt", + "memAddr": "40004", + "index": 4, + "size": 2, + "messages": [ + "ALLARME MOTORE ASPIRATORE TRAVASO", + "WARNING BY-PASS 1 ASPIRAZIONE", + "WARNING BY-PASS 2 ASPIRAZIONE", + "WARNING BY-PASS 3 ASPIRAZIONE", + "WARNING BY-PASS 4 ASPIRAZIONE", + "ALLARME TERMICO VIBRATORI", + "ALLARME INTASAMENTO ESTRATTORE", + "WARNING FILTRI INTASATI PLENUM", + "CUMULATIVO ALLARMI RECUPERATORE", + "WARNING SERRANDA 1 PARTENZA ASPIRAZIONE", + "WARNING SERRANDA 2 PARTENZA ASPIRAZIONE", + "WARNING SERRANDA 3 PARTENZA ASPIRAZIONE", + "ALLARME IMPLOSIONE TUBAZIONI", + "WARNING IMPLOSIONE TUBAZIONI", + "ALLARME VENTILATORE 3", + "ALLARME INTASAMENTO TASCHE" + ] + } +] \ No newline at end of file diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj index cfc8290f..676a6185 100644 --- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj +++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj @@ -235,6 +235,7 @@ + @@ -315,9 +316,13 @@ + + + + diff --git a/IOB-WIN-NEXT/IobModbusTCPImaxAeromec.cs b/IOB-WIN-NEXT/IobModbusTCPImaxAeromec.cs new file mode 100644 index 00000000..1108ffa3 --- /dev/null +++ b/IOB-WIN-NEXT/IobModbusTCPImaxAeromec.cs @@ -0,0 +1,203 @@ +using EasyModbus; +using System; + +namespace IOB_WIN_NEXT +{ + /* -------------------------------------------------------------------------------- + * Controlli ModBusTCP IMAS Aeromeccanica + * - protocollo ModBus TCP + * - specifico comportamento impianti filtrazione IMAS Aeromeccanica + * - gestione allarmi + * + * STRUTTURA MEMORIA a banchi di UInt16, convertiti successivamente in int EVENTUALMENTE divisi per 10/100/1000 + * G:\Drive condivisi\30_Clienti\Jetco\Manuali CNC-PLC\Aspiratori + * + * -------------------------------------------------------------------------------- */ + + public class IobModbusTCPImaxAeromec : IobModbusTCP + { + #region Public Constructors + + /// + /// Classe base con i metodi x ModBusTCP + /// + /// + /// + public IobModbusTCPImaxAeromec(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) + { + lgInfo("NEW IOB ModBus TCP IMAS Aeromec"); + + // provo lettura una prima volta i dati DYN + if (currPLC != null && currPLC.Connected) + { + try + { + processDynData(); + } + catch (Exception exc) + { + lgError($"Eccezione in processDynData iniziale x ModBus TCP IMAS Aeromec:{Environment.NewLine}{exc}"); + } + } + } + + #endregion Public Constructors + + #region Protected Methods + + /// + /// Restituisce status di emergenza, hard coded dall'area di allarmi + /// + protected bool EStop + { + get + { + bool answ = false; + int currStatus = 0; + // hard coded + int statusReg = 40003; + // deve avere allarmi (è un allarme EStop) + if (hasAlarms()) + { + int[] listInt = new int[2]; + listInt = HoldingRegisterLUT[statusReg]; + currStatus = ModbusClient.ConvertRegistersToInt(listInt); + // hard coded il 5° bit + answ = ((currStatus & (1 << 9)) > 0); + } + return answ; + } + } + + /// + /// Restituisce status di LAVORA, hard coded + /// + protected bool Work + { + get + { + bool answ = false; + int currStatus = 0; + // hard coded + int statusReg = 40003; + int[] listInt = new int[2]; + listInt = HoldingRegisterLUT[statusReg]; + currStatus = ModbusClient.ConvertRegistersToInt(listInt); + // hard coded il 5° bit + answ = ((currStatus & (1 << 0)) > 0); + return answ; + } + } + /// + /// Restituisce status di AUTOmatico, hard coded + /// + protected bool Auto + { + get + { + bool answ = false; + int currStatus = 0; + // hard coded + int statusReg = 40003; + int[] listInt = new int[2]; + listInt = HoldingRegisterLUT[statusReg]; + currStatus = ModbusClient.ConvertRegistersToInt(listInt); + // hard coded il 5° bit + answ = ((currStatus & (1 << 14)) > 0); + return answ; + } + } + + /// + /// Effettua decodifica aree memoria alla bitmap usata x MAPO + /// + protected override void decodeToBaseBitmap() + { + // init a zero... + B_input = 0; + + /* ----------------------------------------------------- + * bitmap MAPO STANDARD 60 + * B0: POWER_ON + * B1: RUN + * B2: pzCount + * B3: allarme + * B4: manuale + * B5: slowTC + * B6: WarmUpCoolDown + * B7: EmergArmata + * + ----------------------------------------------------- */ + + var MemInt = new byte[2]; + + int byteSignals = 0; + // bit 0 (poweron) imposto a 1 SE connected... + if (currPLC.Connected) + { + byteSignals += (1 << 0); + } + // processo dagli stati + gravi... + if (!EStop) + { + byteSignals += (1 << 7); + } + + // processo dagli stati + gravi... + if (hasAlarms()) + { + byteSignals += (1 << 3); + } + if (Work) + { + byteSignals += (1 << 1); + } + if (!Auto) + { + byteSignals += (1 << 4); + } + + + // salvo! + B_input = byteSignals; + } + + #endregion Protected Methods + + #region Private Methods + + private void testBlockRead(int baseAddr, int numByte) + { + int baseHold = 40001; + int[] readTestFull = new int[2]; + lgTrace($"-------------------- Inizio test lettura {baseAddr} --------------------"); + try + { + stopwatch.Restart(); + readTestFull = currPLC.ReadHoldingRegisters(baseAddr - baseHold, numByte); + stopwatch.Stop(); + lgTrace($"Stats lettura | {readTestFull.Length} val | {stopwatch.ElapsedMilliseconds}ms"); + } + catch + { } + + for (int i = 0; i < readTestFull.Length / 2; i++) + { + int[] thisSet = new int[2]; + Array.Copy(readTestFull, i * 2, thisSet, 0, 2); + lgTrace($"{baseAddr + i * 2:000} | HoldingRegisters: {thisSet[0]} / {thisSet[1]} | Val Real: {ModbusClient.ConvertRegistersToFloat(thisSet):N6}"); + } + lgTrace("-------------------- Completato test lettura {baseAddr} --------------------"); + } + + private void testRead() + { + foreach (var item in memSetR) + { + testBlockRead(item.Key, item.Value); + } + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/TestClientMan/TestClientMan.sln b/TestClientMan/TestClientMan.sln index 2544c6ae..d1837c14 100644 --- a/TestClientMan/TestClientMan.sln +++ b/TestClientMan/TestClientMan.sln @@ -1,12 +1,14 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32922.545 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32901.82 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestClientMan", "TestClientMan\TestClientMan.csproj", "{533B1F01-3061-4105-BA7F-ADAA72A74C2C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IobManComm", "IobManComm\IobManComm.csproj", "{FEC10BD2-65A7-4FD3-B59C-8200BF80AB51}" EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestClientVB", "TestClientVB\TestClientVB.vbproj", "{F8C3D948-DADA-49EE-9697-54A4B63FD5DE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {FEC10BD2-65A7-4FD3-B59C-8200BF80AB51}.Debug|Any CPU.Build.0 = Debug|Any CPU {FEC10BD2-65A7-4FD3-B59C-8200BF80AB51}.Release|Any CPU.ActiveCfg = Release|Any CPU {FEC10BD2-65A7-4FD3-B59C-8200BF80AB51}.Release|Any CPU.Build.0 = Release|Any CPU + {F8C3D948-DADA-49EE-9697-54A4B63FD5DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8C3D948-DADA-49EE-9697-54A4B63FD5DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8C3D948-DADA-49EE-9697-54A4B63FD5DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8C3D948-DADA-49EE-9697-54A4B63FD5DE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/TestClientMan/TestClientVB/App.config b/TestClientMan/TestClientVB/App.config new file mode 100644 index 00000000..dd73f870 --- /dev/null +++ b/TestClientMan/TestClientVB/App.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TestClientMan/TestClientVB/Form1.Designer.vb b/TestClientMan/TestClientVB/Form1.Designer.vb new file mode 100644 index 00000000..21cce9b8 --- /dev/null +++ b/TestClientMan/TestClientVB/Form1.Designer.vb @@ -0,0 +1,82 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Me.chkOnline = New System.Windows.Forms.CheckBox() + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.txtConf = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.SuspendLayout() + ' + 'chkOnline + ' + Me.chkOnline.AutoSize = True + Me.chkOnline.Location = New System.Drawing.Point(67, 72) + Me.chkOnline.Name = "chkOnline" + Me.chkOnline.Size = New System.Drawing.Size(54, 17) + Me.chkOnline.TabIndex = 0 + Me.chkOnline.Text = "online" + Me.chkOnline.UseVisualStyleBackColor = True + ' + 'Timer1 + ' + Me.Timer1.Interval = 1000 + ' + 'txtConf + ' + Me.txtConf.Location = New System.Drawing.Point(67, 38) + Me.txtConf.Name = "txtConf" + Me.txtConf.Size = New System.Drawing.Size(100, 20) + Me.txtConf.TabIndex = 1 + Me.txtConf.Text = "demo_file.ini" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(17, 41) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(44, 13) + Me.Label1.TabIndex = 2 + Me.Label1.Text = "conf file" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(800, 450) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.txtConf) + Me.Controls.Add(Me.chkOnline) + Me.Name = "Form1" + Me.Text = "Form1" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents chkOnline As CheckBox + Friend WithEvents Timer1 As Timer + Friend WithEvents txtConf As TextBox + Friend WithEvents Label1 As Label +End Class diff --git a/TestClientMan/TestClientVB/Form1.resx b/TestClientMan/TestClientVB/Form1.resx new file mode 100644 index 00000000..d0d99f42 --- /dev/null +++ b/TestClientMan/TestClientVB/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/TestClientMan/TestClientVB/Form1.vb b/TestClientMan/TestClientVB/Form1.vb new file mode 100644 index 00000000..d9649329 --- /dev/null +++ b/TestClientMan/TestClientVB/Form1.vb @@ -0,0 +1,63 @@ +Imports IobManComm + +Public Class Form1 + + Protected rwd As RedisWatchDog + Protected count As Integer + + + Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick + + ' preparo update sul canale di comunicazione + Dim adesso As Date = Date.Now + Dim currStatus As New IobWinStatus + currStatus = rwd.iobStatus + ' aggiorno valori, ad esempio IN da macchina, OUT verso macchina? last update = ultima comunicazione? + currStatus.lastDataIn = adesso.AddSeconds(-3) + currStatus.lastDataOut = adesso.AddSeconds(-2) + currStatus.lastUpdate = adesso + currStatus.online = chkOnline.Checked + + ' note libere x indicare ultimo task? + currStatus.freeNotes = $"Conteggio: {count}" + + ' salvo e invio + rwd.iobStatus = currStatus + + count = count + 1 + + End Sub + + Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load + ' avvio i componenti... + + ' tipicamente è il primo arg con cui sia vvia il sw + Dim codIob As String = "demo_conf" + txtConf.Text = codIob + ".ini" + + ' valori da recuperare da ini... che dovranno corrispondere nel programma che fa partire il sw + Dim tipoIob As String = "SERIAL" + Dim appName As String = "CVSER" + ' 14 è normalmente libero... valori ammessi 0..15) + Dim redisDb As Integer = 14 + ' periodo minimo x considerare il dato variato da parte del server + Dim minSecDelta As Integer = 1 + + Dim adesso As Date = Date.Now + + '' preparo oggetto x gestione WathDog + rwd = New RedisWatchDog(codIob, tipoIob, appName, redisDb, minSecDelta) + + Dim currStatus As New IobWinStatus + currStatus = rwd.iobStatus + currStatus.freeNotes = "starting" + currStatus.online = False + + ' salvo e invio + rwd.iobStatus = currStatus + + ' avvio il timer + Timer1.Start() + + End Sub +End Class diff --git a/TestClientMan/TestClientVB/My Project/Application.Designer.vb b/TestClientMan/TestClientVB/My Project/Application.Designer.vb new file mode 100644 index 00000000..d34e80d1 --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.TestClientVB.Form1 + End Sub + End Class +End Namespace diff --git a/TestClientMan/TestClientVB/My Project/Application.myapp b/TestClientMan/TestClientVB/My Project/Application.myapp new file mode 100644 index 00000000..1243847f --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/Application.myapp @@ -0,0 +1,11 @@ + + + true + Form1 + false + 0 + true + 0 + 0 + true + diff --git a/TestClientMan/TestClientVB/My Project/AssemblyInfo.vb b/TestClientMan/TestClientVB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..37d77867 --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/TestClientMan/TestClientVB/My Project/Resources.Designer.vb b/TestClientMan/TestClientVB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..a77a595e --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TestClientVB.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/TestClientMan/TestClientVB/My Project/Resources.resx b/TestClientMan/TestClientVB/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TestClientMan/TestClientVB/My Project/Settings.Designer.vb b/TestClientMan/TestClientVB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..571fc605 --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.TestClientVB.My.MySettings + Get + Return Global.TestClientVB.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/TestClientMan/TestClientVB/My Project/Settings.settings b/TestClientMan/TestClientVB/My Project/Settings.settings new file mode 100644 index 00000000..85b890b3 --- /dev/null +++ b/TestClientMan/TestClientVB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TestClientMan/TestClientVB/TestClientVB.vbproj b/TestClientMan/TestClientVB/TestClientVB.vbproj new file mode 100644 index 00000000..e4a654e3 --- /dev/null +++ b/TestClientMan/TestClientVB/TestClientVB.vbproj @@ -0,0 +1,172 @@ + + + + + Debug + AnyCPU + {F8C3D948-DADA-49EE-9697-54A4B63FD5DE} + WinExe + TestClientVB.My.MyApplication + TestClientVB + TestClientVB + 512 + WindowsForms + v4.6.2 + true + true + + + AnyCPU + true + full + true + true + bin\Debug\ + TestClientVB.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + AnyCPU + pdbonly + false + true + true + bin\Release\ + TestClientVB.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + On + + + Binary + + + Off + + + On + + + + ..\packages\IobManComm.0.9.2210.2716\lib\IobManComm.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\Newtonsoft.Json.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\NLog.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\Pipelines.Sockets.Unofficial.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\StackExchange.Redis.dll + + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Buffers.dll + + + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Diagnostics.PerformanceCounter.dll + + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.IO.Compression.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.IO.Pipelines.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Memory.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Numerics.Vectors.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Runtime.InteropServices.RuntimeInformation.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Threading.Channels.dll + + + ..\packages\IobManComm.0.9.2210.2716\lib\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + \ No newline at end of file diff --git a/TestClientMan/TestClientVB/packages.config b/TestClientMan/TestClientVB/packages.config new file mode 100644 index 00000000..b0d4b874 --- /dev/null +++ b/TestClientMan/TestClientVB/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file