Senior Software Engineer, Cmco/magnetek Resume
Lynnwood, WashingtoN
SUMMARY:
- An IT professional specializing in the design, development, and implementation of software solutions within WINDOWS, UNIX/LINUX and various RTOS environments.
TECHNICAL SKILLS:
Technology and Tools: C#, C++/CLI, C++, Powershell, Python, (PyCharm), Visual Studio IDE, Code Composer IDE SQL Server, C# LINQ queries and EntityFramework OR/M 6.0, ADO.net, SQL, stored procedures, RDB Design, MySQL. Javascript/ReactJS, Node.js WPF, WCF, Winforms, .NET Interop (PInvoke, C++/CLI), and many other .NET technologies. Agile/Scrum methodology, Design Patterns, MVVM, MVC .NET, NET Core, ASP.NET MVC, JQuery, React, CSS, HTML5. Linux, GNU C++, QT Toolkit/PyQT. Control System and PLC program development using Beckhoff Twincat 2 within a Visual Studio IDE using structured text and Beckhoff ADS interface using C++ and C#. Modbus, CAN, TCP/UDP IP
PROFESSIONAL EXPERIENCE:
Senior Software engineer, CMCO/Magnetek
Confidential
Responsibilities:
- Primary duties involved serving as lead developer/designer of the Impulse Link 5 Windows software application.
- This package is sold commercially as well as used in - house at Magnetek’s AC/DC Drive production facilities.
- Ctrl+Click this link to see Impulse Link 5 Professional. This software assists with setup, maintenance, and real-time monitoring of multiple AC and DC drives.
- Skillsets sets used; Microsoft WPF (Heavy use of Telerik UI WPF controls), Serial/USB programming libraries, TCP/IP, LINQ, PRISM. Also, converted native C++ to .NET managed assemblies using C++/CLI. Languages used were 75% C# and 25% C++. Also some scripting with PowerShell and BASH shell. Visual Studio 2019, PowerShell IDE, LinderSoft SetupBuilder, JIRA project management, Azure repos and CI/CD pipelines
- Development: Began with an uncompleted/unreleasable partial set of Impulse Link 5 code and developed it through Approx. 12 commercial releases. This includes the top level view (WPF/C#), middle MVVM layers, down to the Model layer which consisted of serial RS232/RS485 and TCP communication stacks.
- Developed the UI layer using Microsoft WPF (Windows Presentation Platform) controls and the MVVM design pattern.
- The main UI control is a Telerik WPF GridView. It is the top level view which allows editing of parameters read from the drive and writing them back to the drive. C#
- Developed a communications stack transport layer for serial/USB Modbus RTU as well as a Modbus over
- TCP transport layer. C#
- Using a Texas Instruments CC2651P3 Launch Pad development kit, and CCS (Code Composer studio),
- Developed a communications stack that transfers asci data in JSON format over USB as JSON records. This code was taken/modified from an old ZModem implantation.
- Implemented the “model” data access layer of the MVVM pattern in the Impulse Link 5 application. Ported drive code written in C from many Magnetek drive firmwares running on the drive RTOS to Visual Studio C++. This emulates the drive functionality in memory on the Windows PC application.
- Wrapped the native C code using C++/CLR (.NET Managed C++). This provides interoperability between
- The upper layer managed C# and native C++ drive code.
- Developed a GUI Python (Python3.9/PyQT) for loading/instantiating native (C++ Window DLL) drive code and testing api calls into the dll’s.
- Access to other data sources such as XML and JSON using LINQ and NewtonSoft JSON libraries.
- Migrated Impulse Link 5 code repository from Apache SubVersion (SVN) to GIT in Microsoft Azure repos.
- Also implemented Azure CI/CD build/release pipelines which run unit tests before commits.
- Developed the Impulse Link 5 installation package using LinderSoft SetupBuilder. This includes both local installs and install over the WEB. Also implemented code in IL5 (C#) which automatically performs new release updates over the WEB if users current version is behind newly release version.
Senior Software engineer, Messer Cutting Systems
Confidential
Responsibilities:
- Skillsets sets used; Microsoft WPF, Microsoft Winforms, LINQ, Entity framework, SQL server, PRISM, XML as well as porting Winforms to WPF. Also, converted native C++ to .NET (4.5) using C++/CLI. Languages used were C# and C++.
- Also used PLC structured text to write new and modify existing code for a Beckhoff PLC.
- Primary duties involved;
- Maintenance of existing code: Bug fixes and modifications to the UI layer in Winforms as well as conversions to
- WPF. Also tracked down a heap memory leak in a 3rd party Camera API and proved it was a leak, resulting in the 3rd party to re-write much of the code in the defective module.
- New Development: The next generation uses WPF with MVVM design patterns using Microsoft PRISM.
- Access to data sources such as XML and SQL using LINQ.
- Converted older ADO.NET code to uses LINQ.
- Wrote a new device independent interface in C# (previously C++) for transferring messages through the Beckhoff Bus Controller. At this time, the HMI and all Messer Beckhoff objects use this interface.
- Used PLC structured text to write new and modify existing milling and drilling code for a Beckhoff PLC.
Senior Software engineer, Quad graphics corporation
Confidential
Responsibilities:
- Member of Quad Graphics FCS (Finishing Control Systems) group. Primaries duties involved developing Web Services, custom communication stacks, and service GUI clients which are designed to make production data available to systems not running on the production environment hardware set.
- Member of Quad Graphics FCS (Finishing Control Systems) group. Primaries duties involved developing Web Services, custom communication stacks, and service GUI clients which are designed to make production data available to systems not running on the production environment hardware set.
- Developed a service-oriented architecture using Windows Communication Foundation (WCF) technology (VS2013 C# .NET 4.5), managed/unmanaged interop, as well as integrating legacy production system data access code (C++) into the web service backend. The backend production environment consists of a RTOS, Microware OS9 and Win7 system simultaneously running on a multiple CPU x86 architecture and managed by a RTS Hypervisor system.
- Consequently, real-time production data which previously was only available from applications running directly on production machines on the shop floor are now available over the corporate network via API methods exposed from a WCF service running on the production Win7 side. This provides standardized (SOAP/XML), published interfaces which encapsulate low level communications which provide metrics, counts, configuration, PLC, etc, etc data.
- Developed many WCF services using VS 2012 .NET 4.5 C# as well as C++ for backend access to real-time data. The services use a duplex message exchange pattern and support SOAP/XML. These WCF services are self-hosted within a SCM Windows service running on the Windows side of the Hypervisor OS9/Win7 system. Also used .NET interop technology (P/Invoke, C++/CLI, wrappers, etc) for bridging into native unmanaged C/C++ DLL’s from .NET.
- Additionally developed many LINQ queries for MS SQL Server 2008R2 using Entity Framework OR/M which query and update the production database based on shared memory reads from the production hypervisor system.
- Developed a custom communications stack which provides a path for the top level .NET WCF service methods to access a native C++ library which reads/writes shared memory segments on the production system.
- Developed many (.NET 4.0) WPF UI applications which serve as WCF clients. Windows WPF toolkit controls as well as 3rd party Telerik WPF charting controls, and Expression Blend were used to develop “dashboard” style apps which access the WCF services and display various shop floor metrics. All of the XAML based apps use the MVVM design pattern due to its databinding capabilities and ability to create unit tests without using the view.
- Currently re-writing many of the WPF client forms using ASP.NET MVC4, JQuery, Angular, etc. so as to become browser based and lower the overhead of maintaining executable GUI’s on each client machine
- Member of “FactoryTalk Activation” team. Allows FactoryTalk enabled products to be activated via digitally signed files generated by Rockwell Automation over the Internet. It eliminates the dependency on physical media to initiate activation. As a result, software activations can be delivered, distributed, stored, backed-up and moved electronically.
- VS 2012/C# .NET 4.0 Using C# and WCF (Windows Communication Foundation), developed several new pieces of a messaging system that allows WCF clients to retrieve software activations over the internet through requests and authorization by a Rockwell managed WCF Server.
- Modified and enhanced several WPF based client forms which are installed on end-user workstations.
- VS 2012 C++ - Developed wrapper code and implemented several new FlexNet publisher API routines which facilitate temporary “borrowing” and “checking back in” license activations.
- Performed Visual Studio migration of many VS projects from VS2008 to VS2012. This consisted of approximately 75% C# and 25% C++ code.
- Most of the work performed above were sprint backlog items; Agile/Scrum environment
CONSULTANT
Confidential, Seattle, Washington
Responsibilities:
- Wrote tests using C# as a combination of console and ASP.NET web applications. Web controls testing - wrote automation to test the controls from end to end starting in Visual Studio to invoking in Internet Explorer.
- Maintained existing tools and improved readability of source code.
- Wrote and maintained PowerShell scripts that are the foundation of the build automation.
- Using Microsoft Test Manager, developed automated tests including unit tests, coded UI tests.
CONSULTANT
Confidential, Lynnwood, Washington
Responsibilities:
- Primary duties involved development of touch screen sensor design tools as well as middleware for a large WEB based application used for sensor design and simulations.
- VS2010 C#. Wrote an ATL/COM server which, given sensor design parameters and sensor pattern shape geometric constraints, performs Ohms/Square resistance calculations and generates AutoCAD (dxf) format files for “TotemPole” touch screen sensors.
- VS2010 C#, ASP.NET, SQL. Currently involved in developing multiple pieces of STACK - Sensor Technology Analysis and Creation Kit. This is a web-based sensor design and simulation tool that will be used to create, simulate and validate new sensor designs.
- Designed a data model and schema which is implemented in a MySQL database server. Wrote an ADO.NET/C# based data access layer using MySQL Connector/NET libraries.
- Implemented .NET CLR COM Interop to access unmanaged COM components from the C# .NET backend of the WEB application. This is necessary to leverage already existing legacy code written in C++.
- Developed/Implemented many of the frontend ASP.NET web forms using ASP.NET web controls, AJAX, and straight JavaScript.
- Using WCF (Windows Communication Foundation), implemented a messaging system which allows STACK to send simulation requests to LTSpiceIV analog circuit simulators which are hosted on 3rd party servers. Also developed a stand-alone multithreaded Winforms application which is used to test the services outside of STACK.
CONSULTANT
Confidential, OTTAWA, ILINOIS
Responsibilities:
- Primary duties involved development of touch screen sensor design tools as well as Primary duties involved development of software for automated testing of B@B’s MIPort family of Multi-Interface PCI Bus Serial Cards (RS232, RS422, RS485-4, RS485-2)
- Software Environment: VS2010 C#, as well as .NETS’s P/Invoke services for using several native Windows PnP configuration manager and enumeration functions (Win32 API’s).
- Using the System.IO.Ports.SerialPort class, Plug and Play (PnP) Configuration Manager functions, and WMI (Windows Management Interface) functions, developed a .NET Winforms application which automatically detects the type of card and protocol.
- The application contains functionality for sending and receiving on the virtual com port(s). The functions will send two different data strings at the same time, one in the transmit direction and one in the receive direction. Additionally signal line tests (CTS to RTS, etc) are performed for each protocol.
- The EIA-485 does not define a flow control standard for the half-duplex 485-2 wire protocol.
- Developed a custom flow control protocol by using manual reset events and coding the SerialPort class “DataReceived” event callback to be re-entrant and thread safe.
CONSULTANT
Confidential, Peoria, Illinois
Responsibilities:
- Primary duties involve development of Windows CE (ARMIV) software on-board applications for Cat Detect and Minestar Fleet programs.
- Enhanced a heavily multithreaded GUI used by several embedded application within the various Minestar programs. Technologies used include legacy Win32 windows, MFC, and .NET compact framework winforms.
- Enhanced a proprietary data link layer which provides an interface for messages sent and received on a CAN bus.
- Worked with many different API’s which provide camera, radar and GPS captures.
- Developed a new class of messages which are sent/received via TCP/IP sockets to/from the On-board app to the Minestar dispatching system.
- This project consisted of mainly C and C++ under VS2008 with custom Windows CE SDK’s, as well as some development using C#/.NET compact framework 3.5 and QT 4.7
CONSULTANT
Confidential, Charlottesville, Virginia
Responsibilities:
- Duties involve design/development of control software for a multilayered system which controls moving parts on an eyeglass Lens cutting machine.
- The layers consist of 1. PLC/CnC server layer, 2. Interface DLL for I/O to the PLC, 3. Machine layer (container for parts), 4. Motion Control layer, and 5. Automation layer.
- The machine consists of over 40 moving parts with ~150 sensors. Currently the platform is Visual Studio (2008) C++ and WinCE, but we are writing code which is portable to Linux/Posix platform.
- For Linux platform, used Python 2.6 for test automation: read test data from databases, flat files and xml files. Also used Python it to trigger some dependent remote processes required by our tests, remotely using xml-rpc
- Developed objects which represent each part as well as the timing mechanisms and inputs into the PLC Interface DLL.
- Developed the automation code/logic etc for controlling a conveyor belt which feeds lens into the machine, controls movement of the belt, and machine pivot arm.
- Developed a state change notification system for the machine parts by implementing an “Observer/Observable” design pattern.
- Currently working on a collision detection system which uses a 3-D model of coordinates to detect potential part collisions before they occur and throw exceptions to halt the process.
CONSULTANT
Confidential, NAPERVILLE, ILLINOIS
Responsibilities:
- Duties involved development of an n-tiered monitoring system for SS7 (Signaling System 7) networks.
- Developed a multithreaded Windows service which performs the following:
- Connects to six different IP/Ports (via TCP socket) on an Alcatel switch.
- Receives ILM (Integrated Link Monitoring) data on each port, and stores the data in various data structures in memory. The ILM data is a continuous near-real-time data feed.
- Compares the Alcatel switch ILM data against, the 3rd party link tables (in this case Tekno’s product). When differences are found (i.e. Tx Rate, Point Codes, etc.) the “Delta’s” are written to a SQL Server database.
- Developed a .NET Winforms application which simulates the Alcatel switch and is used for functional and load testing of the aforementioned Windows service. This Winforms application dynamically builds its user interface (i.e. form controls, etc) based on various rule sets that reside in XML files. The application parses the XML, and builds the forms based on criteria specified in XML elements.
- Developed a database structure/schema for handling the above ILM delta data. This database is implemented using SQL Server 2008 R2.
- Developed a web application (ASP.NET 4.0) which displays and manipulates the ILM delta data stored in the SQL server databases.
- The software described above was developed using VS2010, .NET 4.0, and C#.
