Skip to main content

KanoaMES v1.11

Release Date - 5/19/25

Summary

Our latest release 1.11 brings more features and a ton of fixes and improvements to all aspects of the KanoaMES product.


Performance States

We've added Performance Reason Coding that allows speed loss to be coded and categorized. This addition means that you now have a way to codify all the different reasons that can affect an assets' OEE. We call it the trifecta!

  • Downtime Reasons for Availability
  • Item States and Scrap Reasons for OEE Quality
  • Performance Reasons for OEE Performance

performance

Performance States can be grouped into performance reason state classes and then linked to assets and items, so only those reason valid for an asset/item combo are valid selections.

performance

Performance Events can be added via the Performance event editor.

performance

We have created three new widgets that you can use to create a dashboard to display Speed Loss analytics.

  • kanoa/core/dbp/widgets/analytics/performanceReasonBarChart
  • kanoa/core/dbp/widgets/analytics/performanceReasonPieChart
  • kanoa/core/dbp/widgets/analytics/performanceReasonTable

performance


Serialized Numbers

We've added 5 new system functions that allow you to define a serialized template to then start generating serial numbers against.

system.kanoa.serial.addSerialNumber() allows you to specify a prefix, suffix, zfill and starting value for a serialized template name.

Example...

serialInfo = {'serialName': 'lpn', 'prefix': 'KAN', 'zfill': 6, 'suffix': '-A'}

userId = system.kanoa.security.getIDPUserId({'userName': 'SYSTEM'})

serialId, msg = system.kanoa.serial.addSerialNumber(serialInfo, userId)

Once a template has been created, you can now call system.kanoa.serial.getNextSerialNumber(serialId, userId) to generate the next unique serialNumber.

Other functions added are system.kanoa.serial.deleteSerialNumber(), system.kanoa.serial.getSerialNumbers() and system.kanoa.serial.updateSerialField().


Downtime Analysis

We have refactored our asset state event analysis calls to only return downtime events that occur during production runs. Although most of our analysis screens only called for downtime data during production times, it was possible to go the downtime analysis screen and select a period that include non production time and all downtime state events during that time frame would be returned which caused some confusion.

So we have created the following new functions....

  • system.kanoa.event.getAssetStateEvents(). Replaces getDowntimeData() and getStateEvents() functions which have been deprecated.
  • system.kanoa.event.getAssetStateEventsSummary(). Replaces getDowntimeDataSummary() and getStateEventSummary() functions which have been deprecated.
  • system.kanoa.event.getAssetStateEventsByShift(). Replaces getDowntimeDataByShift() which has been deprecated.
  • system.kanoa.event.getAssetStateEventsByShiftSummary(). Replaces getDowntimeDataByShiftSummary() which has been deprecated.
  • system.kanoa.event.getAssetStateEventsByInterval(). Replaces getDowntimeDataByInterval() which has been deprecated.
  • system.kanoa.event.getAssetStateEventsByCategory(). Replaces getDowntimeDataByCategory() which has been deprecated.

All our analysis views have been modified to call the new functions. Any custom screens you have created that call the deprecated functions will still work and they in turn have been modified to also only return downtime during production events.


Implementation Guidance

This release package has been tested against Ignition 8.1.47.

The minimum required version of Ignition is 8.1.33

  • kanoaMES_1_11_12.modl
  • ApexCharts-signed 1.0.17.modl
  • BIJC_Calendar_Component_v1.8.1.modl

Change Log

User Security

  • Add 'Show disabled' to user table.
  • userSource selections are wrong and cannot select default. This has been fixed.
  • Cannot set user as gateway admin. This is because the enabled binding was set to false due to the userSource name. This has been fixed.

Scheduling

  • Default date in schedule Event Viewer is February. This is fixed.
  • Found issue with calculating 'start' and end fields when DB is not set to UTC. This has been fixed.
  • Recurring schedule selection 'Set' button is disabled. This has been fixed.
  • Inherited shifts differ on weekly, monthly, and daily views. This has been fixed.

Material Management

  • 'Show Item Attributes' is now back on the Item Configuration screen. It was removed due to performance issues but is now back and significantly faster.

Lot Management

  • Add 'Export button on Lot Manager to export lots to excel.
  • Added assetTransportId to lotEvent table to be able to track mobile equipment that a lot is placed on.
  • Updated lot trace graph to show asset transport.

Asset Operation

  • Added current shift info to asset operation info panel.

Bug fixes

  • Breadcrumb asset selector show duplicate names. This is fixed.
  • Item State Link page does not update automatically after adding new Item States. This is fixed.
  • Deleting an item state did not remove it from item state table. This is fixed.
  • Disabled item states show up as enabled in "edit" mode. This is fixed.
  • Only show downtime on analysis pages that occurs during Production modes. Added new function called getAssetStateEvents() that replaces getDowntimeData and getStateData().
  • Importing assets sets new states that do not exist in the target system into an asset group. This is fixed.
  • Asset duplication does not maintain cell hierarchy. This is fixed.
  • Run Chart does not properly show Scheduled Events. This is fixed.

Dashboard & Widgets

  • Made downtimeEditor widget more configurable. Added displayOptions to the view params. displayOptions are {'minDuration', 'sortOrder': {'field': 'startDate', 'order': desc'}, 'showState': 'showAll'}. sortOrder field options are 'startDate' or 'duration' showStates options are 'showAll', 'showDTCoded', 'showDTUncoded'
  • Changed the flexContainer properties for the assetLevelHeader view to improve the visual clarity when you have cells under an asset. Set the state icon in assetOEEState to be a 30px square.

Database Schema Changes

  • Updated [mes].lotEvent to add assetTransportId and FK's
  • Updated [mes].[vwLotEvent] to return operationAssetId, operationAssetName and operationAssetPath and assetTransportId
  • Updated [mes].[vwLotOperationEvent] to return assetName and assetPath
  • Updated [mes].[fnGetWOCount] to get product order actual production counts from Line set order and also counterEvent workOrderId. Also only returns outfeed counts for 'line' assets.
  • Updated [mes].[spGetAssetProductionEvents] and [mes].[spGetAssetProductionEventsByShift] to add with (NOLOCK)
  • Updated [mes].[vwAsset] to return a tagPath for all assets not just OEE_Enabled assets.
  • Updated [mes].[vwScheduleBlock] to correctly calculate 'start' and end fields when DB is not set to UTC.
  • Added [mes].[serialNumbers]
  • Added [mes].[vwSerialNumbers]
  • Added [mes].[performanceEvent]
  • Added [mes].[performanceState]
  • Added [mes].[performanceStateClass]
  • Added [mes].[performanceStateLink]
  • Added [mes].[vwPerformanceEvent]
  • Added [mes].[vwPerformanceState]
  • Added [mes].[vwPerformanceStateClass]
  • Added [mes].[vwPerformanceStateLink]
  • Added [mes].[spGetAssetProductionEvents]
  • Added [mes].[spGetAssetProductionEventsByShift]
  • Added [mes].[spGetAssetProductionEventSummary]
  • Added [mes].[spGetAssetStateEvents]
  • Added [mes].[spGetAssetStateEventSummary]
  • Added [mes].[spGetAssetStateEventByShift]
  • Added [mes].[spGetAssetStateEventByCategory]
  • Added [mes].[spGetAssetStateEventByShiftSummary]
  • Added [mes].[spGetAssetStateEventsByInterval]
  • Deprecated [mes].[spGetDowntimeData]
  • Deprecated [mes].[spGetDowntimeDataByCategory]
  • Deprecated [mes].[spGetDowntimeDataByInterval]
  • Deprecated [mes].[spGetDowntimeDataByShift]
  • Deprecated [mes].[spGetStateData]

Projects

KANOA_SCRIPTS

  • Added 'Upload New State Events' View. This shows how to import historical stateEvents directly to the db.

kanoaAPP

  • Added 'performanceReasonBarChart', 'performanceReasonPieChart' and 'performanceReasonTable' to kanoa/core/dbp/widgets/analytics views.
  • Added 'performanceStateClassEditor', 'performanceStateConfiguration' and 'performanceStateEditor' to kanoa/mes/config/performanceStates views.
  • Updated 'lotTrace', 'lotOperationEventInfo', 'lotEvents' in kanoa/mes/lots views. Updated 'kanoa/mes/lots/lotPanel/lotEvents'. Change is to handle new assetTransportId field.
  • Updated 'kanoa/core/templates/selectors/dateSelector' view to add displayOption 'persistent' to view params. Useful when you have two dateSelector on the same view and you want them to not interact.
  • Updated kanoa/scheduler/operations and kanoa/scheduler/shifts to fix 'Default date in schedule Event Viewer is February'.
  • Updated kanoa/core/dbp/widgets/analytics/assetOEEBarChart. This widget got broken. hourTimestamp became hourTimeStamp and oee is no longer returned
  • Updated kanoa/mes/asset/downtime/downtimeTable to use new getAssetStateEvents() function. Downtime viewer was not working correctly for 'This Week' date range.
  • Updated kanoa/mes/asset/downtime/downtimeTable, kanoa/core/dbp/widgets/analytics/assetDowntimeTable, kanoa/mes/analytics/downtimeApex, kanoa/core/dbp/widgets/inputs/downtimeEditor kanoa/mes/analytics/embedded/assetChart, kanoa/core/dbp/widgets/analytics/topDowntimeBy, kanoa/core/dbp/widgets/analytics/assetDowntimeBarChart, kanoa/mes/analytics/widgets/assetDowntimeBarChart
  • to use new getAssetStateEvents() function.
  • Updated kanoa/mes/config/itemStates/itemStateConfiguration to fix issue with deleting an item state did not remove it from item state table.
  • Updated kanoa/mes/analytics/runChart/equipmentSchedule to properly show Scheduled Events.
  • Updated kanoa/scheduler/embedded/recurringOptions to fix issue with set button being disabled.
  • Updated kanoa/mes/asset/runReview/runTable to support runs containing multiple production orders.

System Functions

  • Added new function system.kanoa.event.getAssetStateEvents(). This function replaces getDowntimeData() and getStateEvents() functions which have been deprecated.
  • Added new function system.kanoa.event.getAssetStateEventsSummary(). This function replaces getDowntimeDataSummary() and getStateEventSummary() functions which have been deprecated.
  • Added new function system.kanoa.event.getAssetStateEventsByShift(). This function replaces getDowntimeDataByShift() which has been deprecated.
  • Added new function system.kanoa.event.getAssetStateEventsByShiftSummary(). This function replaces getDowntimeDataByShiftSummary() which has been deprecated.
  • Added new function system.kanoa.event.getAssetStateEventsByInterval(). This function replaces getDowntimeDataByInterval() which has been deprecated.
  • Added new function system.kanoa.event.getAssetStateEventsByCategory(). This function replaces getDowntimeDataByCategory() which has been deprecated.
  • Added new function system.kanoa.item.checkItemClassPath(). When a new item is received from ERP, this function will check if the itemClassPath exists and if not, creates it.
  • Added new function system.kanoa.event.updateCounterEvent().
  • Added new function system.kanoa.event.getPerformanceEvents()
  • Added new function system.kanoa.event.addPerformanceEvent()
  • Added new function system.kanoa.event.updatePerformanceEvent()
  • Added new function system.kanoa.event.deletePerformanceEvent()
  • Added new functions library system.kanoa.serial
  • Added new functions library system.kanoa.performanceState
  • Updated system.kanoa.asset.getCounterType() to handle enabled column value when it is null.
  • Updated system.kanoa.asset.getAssets() to add assetName and assetGroupName being passed as a parameters.
  • Updated system.kanoa.attribute.getAttributeEvents() to accept two new parameters 'strictDates' and 'hasValue'.
  • Updated system.kanoa.item.addItemAttribute() to return itemAttrId if attribute already exists.
  • Updated system.kanoa.order.getProductionOrderMetaData() to handle a null workorderId.
  • Updated system.kanoa.order.getProductionOrders() to remove dueDate is null as it was slowing performance.
  • Updated system.kanoa.shift.getShiftCalendarEvents() to ensure inherited shifts are returned correctly for periods other a week.
  • Updated system.kanoa.shift.getCurrentShift() to use GETDATE() to check for current shift.
  • Updated system.kanoa.shift.updateShiftEvents() to correct 'No Shift' defines offset when database is not in UTC.
  • Updated system.kanoa.event.addCounterEvent() to handle optional parameters.
  • Updated system.kanoa.asset.unlinkAssetState(). Not all return paths were returning a tuple.
  • Updated system.kanoa.asset.enableAssetStateLink(). Now returns a tuple.
  • Updated system.kanoa.asset.exportAsset() to replace local copy.
  • Updated system.kanoa.asset.updateMode(). getKey was set to 1, changed to 0 for # of records modified.
  • Updated system.kanoa.asset.unlinkAssetMode(). Not all return paths were returning a tuple.
  • Updated system.kanoa.asset.setAssetModeCode(). Switched to getKey=0 to return # of records modified.
  • Updated system.kanoa.asset.updateStateCategory(). Modified return tuple.
  • Updated system.kanoa.asset.updateStateField(). Updated getKey=0.
  • Updated system.kanoa.asset.deleteStateCategory(). Modified return tuple.
  • Updated system.kanoa.attribute.getAttributes(). Parameterized attributePath to handle special chars.
  • Updated system.kanoa.asset.getClosestAncestorAttribute(). Check for null assetPath and assetAttrName.
  • Updated system.kanoa.event.getModeEvents(). Allow just the startDate to be passed to see if a modeEvent exists at this time.
  • Updated system.kanoa.security.addUser(). Removed casting of int on user.id
  • Updated system.kanoa.lot.getLotsForLotOperationEvent(), getLotOperationEvent(), addLotOperationEvent(), updateLotOperationEvent(), deleteLotOperationEvent() and executeLotOperation() to support assetTransportId and to handle execution when we can't create a lotId due to missing field.

Intellisense

  • Corrected system.kanoa.security.getIDPUserId().
  • Corrected system.kanoa.event.addStateEvent().
  • Corrected system.kanoa.security.addUser().
  • Corrected system.kanoa.asset.addAsset().

Tags

  • Add new generalCounterUDT. It's a UDT that you can drop into a line tag folder and configure it to add other 'general' counts.