# About

Data Stream is the result of passionate individuals with significant industry experience and thousands of hours of trial and error. Our proven standards, best practices, and platform have stood the test of time.


# Getting Started

## Getting Super Powers

Becoming a super hero is a fairly straight forward process:

```
$ give me super-powers
```

{% hint style="info" %}
&#x20;Super-powers are granted randomly so please submit an issue if you're not happy with yours.
{% endhint %}

Once you're strong enough, save the world:

{% code title="hello.sh" %}

```bash
# Ain't no code for that yet, sorry
echo 'You got to trust me on this, I saved the world'
```

{% endcode %}


# Server

Data Stream is a client server platform which runs on virtually any computer capable of running Microsoft Windows.

## Hardware Specifications

| Component | Minimum | Recommended |
| --------- | ------- | ----------- |
| Processor | 1 GHz   | >= 2.8 GHz  |
| RAM       | 4 GB    | >= 16 GB    |
| Storage   | 64 GB   | >= 256 GB   |

## Operating System Requirements

| Operating System                | .NET Installed with OS | .NET Required        |
| ------------------------------- | ---------------------- | -------------------- |
| Windows 7 SP1                   | N/A                    | .NET Framework 4.6.2 |
| Windows 8.1                     | .NET Framework 4.5.1   | .NET Framework 4.6.2 |
| Windows 10                      | .NET Framework 4.6     | .NET Framework 4.6.2 |
| Windows 10 November Update      | .NET Framework 4.6.1   | .NET Framework 4.6.2 |
| Windows 10 Anniversary Update   | .NET Framework 4.6.2   | N/A                  |
| Windows 10 Creators Update      | .NET Framework 4.7     | N/A                  |
| Windows 10 Fall Creators Update | .NET Framework 4.7.1   | N/A                  |
| Windows 10 April 2018           | .NET Framework 4.7.2   | N/A                  |

## Required Software

### Installing SQL Server 2017

#### Step 1 - Click Installation

<div align="left"><img src="/files/-LTT6vVHLR_HoHfZqiG1" alt=""></div>

#### Step 2 - Click New SQL Server stand-alone installation or add features to an existing installation

<div align="left"><img src="/files/-LTT6vVJ9FhApvMv98gw" alt=""></div>

#### Step 3 - Enter Product Key

<div align="left"><img src="/files/-LTT6vVLGQuv3nDk3DnW" alt=""></div>

#### Step 4 - Accept Microsoft SQL Server License Terms

<div align="left"><img src="/files/-LTT6vVMSP9ZiMSuXYFH" alt=""></div>

#### Step 5 - Select Database Engine Services, Machine Learning Services (In-Database)

<div align="left"><img src="/files/-LTT6vVNPgyDS390z7Ow" alt=""></div>

#### Step 6 - Select Default Instance

<div align="left"><img src="/files/-LTT6vVOdHQaP8D5NmuL" alt=""></div>

#### Step 7 - Grant Perform Volume Maintenance Task privilege to SQL Server Database Engine Service

<div align="left"><img src="/files/-LTT6vVPKn_kC9Uc8aUo" alt=""></div>

#### Step 8 - Select Mixed Mode, Enter & Confirm Password, Add Current User to SQL Server Administrators

<div align="left"><img src="/files/-LTT6vVQztkwbCeXArBo" alt=""></div>

#### Step 9 - Accept Microsoft Open R License Terms

<div align="left"><img src="/files/-LTT6vVRVxjVI0JeBHZh" alt=""></div>

#### Step 10 - Accept Anaconda License Terms

<div align="left"><img src="/files/-LTT6vVS9RvnJscWvKW3" alt=""></div>

#### Step 11 - Install

<div align="left"><img src="/files/-LTT6vVTPL4Id1o1ChRb" alt=""></div>

### Installing Data Stream

#### Step 1 - Select Destination Directory

<div align="left"><img src="/files/-LTT6vVU4is5RkOcPO8d" alt=""></div>

#### Step 2 - Click Install

<div align="left"><img src="/files/-LTT6vVV3tDNXDb4dotH" alt=""></div>

#### Step 3 - Finish Install

<div align="left"><img src="/files/-LTT6vVWjDZqRw5ZAjWm" alt=""></div>

#### Step 4 - Verify Notification Taskbar Started

<div align="left"><img src="/files/-LTT6vVXsf9w6Th-NGIE" alt=""></div>

## Required Configuration

### Disable Windows Firewall

Unsolicited Messaging uses system resources very efficiently but has difficulties communicating with the PLC IO tree when the firewall is enabled.

#### Step 1 - Open Windows Defender Firewall

<div align="left"><img src="/files/-LTT6vVY_3CoD-NC0sXz" alt=""></div>

#### Step 2 - Open Turn Off Windows Defender Firewall

<div align="left"><img src="/files/-LTT6vVZnFuUisx3Ti-_" alt=""></div>

#### Step 3 - Turn Off Windows Defender Firewall

<div align="left"><img src="/files/-LTT6vV_3yHLXUaAt280" alt=""></div>

## Optional Software

| Name                         | Link                                                                                                                  |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| SQL Server Management Studio | [Download](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017) |

## Optional Configuration

### Enable Web Sockets

Web sockets make it possible to open a two-way interactive communication session between the user and server. Data Stream uses web sockets to send and receive responses without having to initiate a poll between either endpoint.

#### Step 1 - Open Windows Features

<div align="left"><img src="/files/-LTT6vVaDsLxqQ__G28P" alt=""></div>

#### Step 2 - Enable Web Socket Protocol

<div align="left"><img src="/files/-LTT6vVbyGJVafCYSfGm" alt=""></div>


# Client

Data Stream Client runs on Microsoft Windows with .NET 4.6.2 and above.

{% hint style="info" %}
Multiple versions allow us to support your internal IT department processes.
{% endhint %}

| Version                                            | Download Link                                                                                         |
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Client **with** automatic updating                 | [Link](https://prettybrookstorage.blob.core.windows.net/installers/FileManagerService-18.12.12.3.exe) |
| Client **without** automatic updating              | [Link](https://prettybrookstorage.blob.core.windows.net/prettybrook-bootstrapper-squirrel/Setup.exe)  |
| Machine Wide Client **with** automatic updating    | [Link](https://prettybrookstorage.blob.core.windows.net/prettybrook-bootstrapper-squirrel/Setup.msi)  |
| Machine Wide Client **without** automatic updating | [Link](https://prettybrookstorage.blob.core.windows.net/prettybrook-bootstrapper-squirrel/Setup.msi)  |

{% hint style="success" %}
If you are not sure, download the client **with** automatic updating [here](https://prettybrookstorage.blob.core.windows.net/prettybrook-bootstrapper-squirrel/Setup.exe).
{% endhint %}

{% hint style="warning" %}
Automatic Updating required with version >= 19.11.1101
{% endhint %}

## Manual Updating

If updates are available, the download cloud icon will display on the status bar.

To begin the updating process, click the download cloud icon.

<div align="left"><img src="/files/-LTi1_n_9G9WP4nI-epm" alt=""></div>

After the download has completed an application restart is required to complete the process.

To restart the application, please click the restart icon in the status bar.

![](/files/-LTi1_nbvNmPZva5K5vC)


# Connectivity

Data Stream supports multiple databases from a single client application installation.

## Selecting Existing Connection

<div align="left"><img src="/files/-LTiK3Z9eX6HfGSWwCVH" alt="Click on a connection to activate the check mark button. "></div>

<div align="left"><img src="/files/-LTiK3ZBOoT5e0wS8pzK" alt="Clicking on the check mark icon will navigate to the main screen."></div>

## Configuring Connections

<div align="left"><img src="/files/-LTiMUyH9NIiH_SRo6Tn" alt="Clicking on the gear will navigate to the add connectivity screen."></div>

<div align="left"><img src="/files/-LTiMUyIbmZq97kLt0BA" alt="Clicking on the plus will create a new connection."></div>

<div align="left"><img src="/files/-LTiMUyJcasLHprew9V-" alt="Set the properties accordingly, please do not forget to hit save."></div>

## Changing Connections

<div align="left"><img src="/files/-LTiPzKMtHRdDcqltdPo" alt="Clicking on the database icon will navigate to the existing connection screen."></div>


# Operations / Areas

Data Stream supports operations, and areas. This parent child relationship combined with a sequence order creates the foundation for routing.

{% hint style="info" %}
Operations are defined as a group of process steps.&#x20;
{% endhint %}

{% hint style="info" %}
Areas are defined as the physical area these process steps are performed at.
{% endhint %}

{% hint style="success" %}
At least one operation and one area are required for routing.
{% endhint %}

## Examples

### Operation & Area

<div align="left"><img src="/files/-LTiYLPwh5DtGErPpdP9" alt=""></div>

### Operation & Parallel Area

<div align="left"><img src="/files/-LTiYLPxiLnS5rEPV4R1" alt=""></div>


# Routing

Data Stream supports most serialized manufacturing routing conditions by leveraging a data matrix between route, area, and part type.

<div align="left"><img src="/files/-LTieTH2fKeGdERZao2B" alt=""></div>

{% content-ref url="/pages/-M2YYKi87--MLVfqCAw3" %}
[Routing Enforcement](/support/definitions/routing-enforcement)
{% endcontent-ref %}

{% content-ref url="/pages/-M2YYUqyldhAB0xaNiqX" %}
[Routing Configuration](/support/definitions/routing-configuration)
{% endcontent-ref %}


# Part Types

Data Stream supports&#x20;

<div align="left"><img src="/files/-LTifAgd1LSCbjBVpyvo" alt=""></div>

{% hint style="warning" %}
When **adding** part types, configuration will be initially synchronized with the synchronization master. If **no** synchronization master is set, ***default*** configuration will be used.
{% endhint %}


# Serial Number Assistance

Data Stream is a serialized system with most data being traceable to a serial number or identifier.&#x20;

To assist with ease of input, Data Stream supports a variety of input devices to meet your needs.

Please find your device below for additional information:

{% content-ref url="/pages/-LTi625QV29FlrP0veer" %}
[Scanner](/configuration/serial-number-assistance/scanner)
{% endcontent-ref %}


# Scanner

Each Data Stream installation supports configuring one scanner. The scanner component will parse incoming data, and fill user input boxes where applicable.

{% hint style="info" %}
Not every input box is compatible with the scanner component.
{% endhint %}

### Scanner Configuration Dialog

<div align="left"><img src="/files/-LTi7WZoLlJhsELv4EqE" alt=""></div>

{% hint style="warning" %}
In non-DHCP environments, remember to change your local IP address and sub net before attempting to connect to the scanner. Proper network settings are required to establish connection.
{% endhint %}

### Default Port Settings

| Device     | Default Port |
| ---------- | ------------ |
| Cognex     | 23           |
| Data Logic | 51000        |


# Definitions


# Cycle Status

Data Stream uses a precedence algorithm to control and enforce proper data streams throughout.&#x20;

{% hint style="warning" %}
In order for a cycle status to be updated, the new cycle status must have a higher precedence than the previous status.
{% endhint %}

| Code | Name       | Description                                                                                                     | Precedence |
| ---- | ---------- | --------------------------------------------------------------------------------------------------------------- | :--------: |
| E    | Empty      | Empty is reserved for system use and occurs when a data stream is missing both a serial number and part number. |      0     |
| T    | In-Transit | In-Transit is reserved for system use and occurs when a data stream has both a serial number and part number.   |      1     |
| I    | In-Process | In-Process is reserved for system use and occurs when a data stream is missing both accept and reject signals.  |      2     |
| A    | Accept     | Accept occurs when a data stream has an accept and not a reject signal.                                         |      3     |
| X    | Reject     | Reject occurs when a data stream has a reject signal.                                                           |      4     |
| R    | Repair     | Repair is reserved for Teardown use and occurs when an operator completes the repair process.                   |      5     |
| S    | Scrap      | Scrap is reserved for Teardown use and occurs when an operation completes the scrap process.                    |      6     |


# Routing Enforcement

| Code | Name     | Description                                                                                                                                                                                    |
| ---- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| B    | Bypassed | Get Build / On Entry workflows will always return NOK to Build.                                                                                                                                |
| O    | Optional | Get Build / On Entry workflows will check previously stored routing information and return NOK to Build if 'Reject' cycle status is present. All other cycle status's will be ignored.         |
| R    | Required | Get Build / On Entry workflows will check previously stored routing information and return OK to Build if 'Accept' cycle status is present. All other cycle status's will return NOK to Build. |


# Routing Configuration

| Name                              | Description                                                                                                                                                                                  |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Max Rework Attempts               | Max rework attempts is used to limit the number of attempts for an area / part combination before scrapping of components is required.                                                       |
| Cycle Cool Down Time              | Cycle cool down time is used to enforce a cool down between cycles for a part at an area.                                                                                                    |
| Previous Operation Cure Time      | Previous operation cure time is used to enforce a maximum time between areas for a part.                                                                                                     |
| Enforce Previously Completed      | Enforce previously completed enables routing enforcement validation for a part at an area.                                                                                                   |
| Enforce Already Completed         | Enforce already completed will return NOK to Build for a part which has a 'Accept' cycle status at an area.                                                                                  |
| Enforce Rejected by Operation     | Enforce rejected by operation will return NOK to Build for a part which has a 'Reject' cycle status at an area.                                                                              |
| Enforce Previously Rejected       | Enforce previously rejected will return NOK to Build for a part which has a 'Reject' cycle status at a previous station.                                                                     |
| Enforce Max Rework Attempts       | Enforce max rework attempts will return NOK to Build for a part which has exceeded the Max Rework Attempts at an area.                                                                       |
| Enforce Cycle Cool Down Time      | Enforce cycle cool down time will return NOK to Build for a part which has not exceeded the Cycle Cool Down Time at an area.                                                                 |
| Enforce Prev. Operation Cure Time | Enforce previous operation cure time will return NOK to Build for a part which has exceeded the Previous Operation Cure Time at an area.                                                     |
| Enforce Operation Round Robin     | Enforce operation round robin will return NOK to Build for a part which has previously run at a area without running subsequently running at all other areas inside of a parallel operation. |


# Disaster Recovery

Data Stream as a stand alone product is not disaster tolerant but works in conjunction with industry leading products to form a disaster recovery process.

{% hint style="success" %}
Disasters are never a planned event but planning for one is critical to minimizing impact.&#x20;
{% endhint %}

## Microsoft SQL Agent

Data Stream recommends the use of [Ola Hallengren Scripts](https://ola.hallengren.com/).

{% hint style="warning" %}
Don't forget to set a backup schedule for each Microsft SQL Agent Job. \[[Reference](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-2017)]
{% endhint %}

### Ola Hallengren Scripts

Download the scripts [here](https://ola.hallengren.com/scripts/MaintenanceSolution.sql).

<div align="left"><img src="/files/-LTdBESBUYugG6dkW14M" alt="Once you have successfully executed the Ola Hallengren Scripts, the Microsoft SQL server agent should contain the following jobs."></div>

## Load Balancing Fail-over

### Manual Fail-over

When the mirrored database is synchronized, the database owner or system administrator can initiate manual fail-over to the secondary server.

```sql
USE master;
GO

ALTER DATABASE [DataStream] SET PARTNER FAILOVER;
```

{% hint style="warning" %}
Validation of mirroring status is critical to a successful fail-over. \[[Reference](/support/disaster-recovery/load-balancing#validation)]
{% endhint %}

### Automatic Fail-over

Automatic fail-over occurs when the fast startup is disabled and computer is properly shutdown.

{% hint style="danger" %}
Automatic fail-over will not occur in a loss of power disaster.
{% endhint %}

#### Disabling Fast Startup

<div align="left"><img src="/files/-LThfA7TpEgvn-dFMemX" alt=""></div>


# Client Update Fails

Data Stream Clients supports auto updating when connected to the internet.

{% hint style="success" %}
Follow these instructions to reinstall Data Stream

1. Login to Windows using the affected users credentials.
2. Uninstall Pretty Brook Bootstrapper.
   1. Do **not** uninstall Pretty Brook Bootstrapper Machine Wide Installer.
3. Delete the affected users directory at:
   1. C:\Users{User Name}\AppData\Local\PrettyBrookBootstrapper
4. Logout of Windows
5. Login to Windows using the affected users credentials.
   1. If Data Stream Machine Wide Installer **is** installed, Data Stream will install as part of the login process.
   2. If Data Stream Machine Wide installer **is not** install, please install follow these [instructions](/installation/client).
      {% endhint %}

{% hint style="danger" %}
Still having issues? [Contact Us](/support/contact-us)
{% endhint %}


# Load Balancing

Data Stream supports load balancing between two computers running Microsoft SQL Server and configured for [database mirroring](https://docs.microsoft.com/en-us/sql/database-engine/database-mirroring/database-mirroring-sql-server?view=sql-server-2017).

## Installation

1. [Create Primary Master Key](/support/disaster-recovery/load-balancing#create-primary-master-key)
2. [Create Primary Certificate](/support/disaster-recovery/load-balancing#create-primary-certificate)
3. [Create Primary Endpoint](/support/disaster-recovery/load-balancing#create-primary-endpoint)
4. [Backup Primary Certificate](/support/disaster-recovery/load-balancing#backup-primary-certificate)
5. [Create Secondary Login](/support/disaster-recovery/load-balancing#create-secondary-login)
6. [Create Secondary Master Key](/support/disaster-recovery/load-balancing#create-secondary-master-key)
7. [Create Secondary Certificate](/support/disaster-recovery/load-balancing#create-secondary-certificate)
8. [Create Secondary Endpoint](/support/disaster-recovery/load-balancing#create-secondary-endpoint)
9. [Backup Secondary Certificate](/support/disaster-recovery/load-balancing#backup-secondary-certificate)
10. [Create Primary Login](/support/disaster-recovery/load-balancing#create-primary-login)
11. [Map Primary Certificate to Primary User](/support/disaster-recovery/load-balancing#map-primary-certificate-to-primary-user)
12. [Grant Connect to Primary User](/support/disaster-recovery/load-balancing#grant-connect-to-primary-login)
13. [Map Secondary Certificate to Secondary User](/support/disaster-recovery/load-balancing#map-secondary-certificate-to-secondary-user)
14. [Grant Connect to Secondary User](/support/disaster-recovery/load-balancing#grant-connect-to-secondary-user)
15. [Alter Primary Database Set Partner](/support/disaster-recovery/load-balancing#alter-primary-database-set-partner)
16. [Alter Secondary Database Set Partner](/support/disaster-recovery/load-balancing#alter-primary-database-set-partner)

### Primary

#### Create Primary Master Key

```sql
USE master;

CREATE MASTER KEY ENCRYPTION
  BY PASSWORD = 'secret password';
GO
```

#### Create Primary Certificate

```sql
USE master;

CREATE CERTIFICATE PRIMARY_cert
   WITH SUBJECT = 'Primary certificate for database mirroring',
   EXPIRY_DATE = '1/1/2038';
GO
```

#### Create Primary Endpoint

```sql
USE master;

CREATE ENDPOINT Mirroring
   STATE = STARTED
   AS TCP (
      LISTENER_PORT = 5022
      , LISTENER_IP = ALL
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE PRIMARY_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   );
GO
```

#### Backup Primary Certificate

```sql
USE master;

BACKUP CERTIFICATE PRIMARY_cert 
  TO FILE = 'C:\PRIMARY_cert.cer';
GO
```

#### Create Secondary Login

```sql
USE master;

CREATE LOGIN SECONDARY_login
   WITH PASSWORD = 'secondary secret password';
GO

CREATE USER SECONDARY_user FOR LOGIN SECONDARY_login;
GO 
```

#### Map Secondary Certificate to Secondary User

```sql
USE master;

CREATE CERTIFICATE SECONDARY_cert
   AUTHORIZATION SECONDARY_user
   FROM FILE = 'C:\SECONDARY_cert.cer';
GO
```

#### Grant Connect to Secondary User

```sql
USE master;

GRANT CONNECT ON ENDPOINT::Mirroring TO [SECONDARY_login];
GO
```

#### Alter Primary Database Set Partner

```sql
USE master;

ALTER DATABASE [DataStream] SET PARTNER = 'TCP://PARTNER:5022';
GO
```

### Secondary

#### Create Secondary Master Key

```sql
USE master;

CREATE MASTER KEY ENCRYPTION
  BY PASSWORD = 'secret password';
GO
```

#### Create Secondary Certificate

```sql
USE master;

CREATE CERTIFICATE SECONDARY_cert
   WITH SUBJECT = 'Secondary certificate for database mirroring',
   EXPIRY_DATE = '1/1/2038';
GO
```

#### Create Secondary Endpoint

```sql
USE master;

CREATE ENDPOINT Mirroring
   STATE = STARTED
   AS TCP (
      LISTENER_PORT = 5022
      , LISTENER_IP = ALL
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE SECONDARY_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   );
GO
```

#### Backup Secondary Certificate

```sql
USE master;

BACKUP CERTIFICATE SECONDARY_cert 
  TO FILE = 'C:\SECONDARY_cert.cer';
GO
```

#### Create Primary Login

```sql
USE master;

CREATE LOGIN PRIMARY_login
   WITH PASSWORD = 'primary secret password';
GO

CREATE USER PRIMARY_user FOR LOGIN PRIMARY_login;
GO
```

#### Map Primary Certificate to Primary User

```sql
USE master;

CREATE CERTIFICATE PRIMARY_cert
   AUTHORIZATION PRIMARY_user
   FROM FILE = 'C:\PRIMARY_cert.cer';
GO
```

#### Grant Connect to Primary Login

```sql
USE master;

GRANT CONNECT ON ENDPOINT::Mirroring TO [PRIMARY_login];
GO
```

#### Alter Secondary Database Set Partner

```sql
USE master;

ALTER DATABASE [DataStream] SET PARTNER = 'TCP://PARTNER:5022';
GO
```

## Validation

### Primary

<div align="left"><img src="/files/-LTd8ONaYo3fVWUzLcsx" alt=""></div>

### Secondary

<div align="left"><img src="/files/-LTd8ONZZsJftLcX7q0_" alt=""></div>


# Manual Application Restart

Data Stream runs as a Windows Service which, if configured, should automatically start when Windows completes its boot process.&#x20;

If Data Stream does not automatically start, use the below sequence to restore service functionality.

1. [Launch Services](/support/disaster-recovery/manual-application-restart#launch-services)
2. [Locate Data Stream Services](/support/disaster-recovery/manual-application-restart#locate-data-stream-services)
3. [Restart Data Stream Polling](/support/disaster-recovery/manual-application-restart#restart-data-stream-polling-service)
4. [Restart Data Stream Manager](/support/disaster-recovery/manual-application-restart#restart-data-stream-manager-service)
5. [Restart Data Stream Unsolicited](/support/disaster-recovery/manual-application-restart#restart-data-stream-unsolicited-service)

### Launch Services

<div align="left"><img src="/files/-LdEtID041nLlnSp9PW_" alt=""></div>

### Locate Data Stream Services

<div align="left"><img src="/files/-LdEuE5Zn0K19sCXMDGT" alt=""></div>

{% hint style="info" %}
Service status of 'Running' does not always mean Data Stream is running. If Data Stream does not appear to be running, restart the services in the order listed below.
{% endhint %}

### Restart Data Stream Polling Service

<div align="left"><img src="/files/-LdEwSS5asfa--UAoY1V" alt=""></div>

### Restart Data Stream Manager Service

<div align="left"><img src="/files/-LdEwVnupx4CEyNpqjOU" alt=""></div>

### Restart Data Stream Unsolicited Service

<div align="left"><img src="/files/-LdEwZHxKGh1MEVfASGx" alt=""></div>


# Workflow Response Codes

Data Stream provides a response to each workflow request. With the proper handling of each code, Data Stream will function in a repeatable way.

{% hint style="success" %}
Successful workflows will have an acknowledgement of 1 or >= 370.
{% endhint %}

{% hint style="danger" %}
Workflow issues will have an acknowledgement of -2 or >= 350 and < 370.
{% endhint %}

| Code | Name                                                    | Description                                                                                                                                                                                                                                                                                                                                              |
| ---- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| -2   | Unknown                                                 | Unknown is set at the beginning of all workflows. This acts as a generic catch all for internal application workflow issues. This code is reserved for system activities.                                                                                                                                                                                |
| -1   | Reset                                                   | Reset is an acknowledgement that a workflow request has been received.                                                                                                                                                                                                                                                                                   |
| 1    | Success                                                 | Success is an acknowledgement that a workflow request has been completed successfully.                                                                                                                                                                                                                                                                   |
| 350  | Error Workflow Input                                    | Error workflow input should only occur on development workflows that have not been released to production.                                                                                                                                                                                                                                               |
| 351  | Error Workflow Trigger                                  | Error workflow trigger should only occur on development workflows that have not been released to production.                                                                                                                                                                                                                                             |
| 352  | Error Reading PLC                                       | Error reading PLC will occur any time a PLC read has been requested and the result was not successful. Read transactions typically only fail when the PLC tag does not exist, the PLC is not in run mode, or the PLC is not reachable from Data Stream.                                                                                                  |
| 353  | Error Writing PLC                                       | Error writing PLC occurs any time a PLC write has been requested and the result was not successful. Write transactions typically only fail when the PLC tag does not exist, the PLC is not in run mode, or the PLC is not reachable from Data Stream.                                                                                                    |
| 354  | Error Reading Database                                  | Error reading database occurs any time a critical database error occurs while executing OnEntryWorkflows. There are numerous error possibilities all of which are critical. This acts as a generic catch all for OnEntryWorkflows.                                                                                                                       |
| 355  | Error Writing Database                                  | Error writing database occurs any time a critical database error occurs while executing OnExitWorkflows. There are numerous error possibilities all of which are critical. This acts as a generic catch all for OnExitWorkflows.                                                                                                                         |
| 356  | Error Remote Communications                             | Error remote communications occurs when a device other than a database or PLC responds with a non successful transaction or throws an exception. Remote communication errors typically occur when the device is not reachable from Data Stream.                                                                                                          |
| 357  | Error Foreign Characters Exist                          | Error foreign characters exist occurs after a successful PLC read when characters exist that are not configured. Foreign character errors typically occur with leading and trailing spaces inside of a string.                                                                                                                                           |
| 358  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 359  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 360  | Error Area Name is Missing or Invalid                   | Error area name is missing or invalid occurs when the PLC and database area configurations do not match. Error area name is missing or invalid typically occurs during development after the PLC has established an area name and before the area name has been input into the database.                                                                 |
| 361  | Error Serial Number is Missing or Invalid               | Error serial number is missing or invalid occurs when the database cannot find the serial number requested. Error serial number is missing or invalid typically occurs when the PLC serial number tag is empty.                                                                                                                                          |
| 362  | Error Part Number is Missing or Invalid                 | Error part number is missing or invalid occurs when the database cannot find the part number requested. Error part number is missing or invalid typically occurs when the PLC part number tag is empty.                                                                                                                                                  |
| 363  | Error Secondary ID is Missing or Invalid                | Error secondary ID is missing or invalid occurs when the database cannot find the secondary ID to serial number cross reference. Error secondary ID is missing or invalid typically occurs when the PLC secondary ID tag is empty, marriage workflow has not been executed, or divorce workflow was executed after marriage and before current workflow. |
| 364  | Error Routing is Missing or Invalid                     | Error routing is missing or invalid occurs when parallel operations have missing or inconsistent routing configurations. Error routing is missing or invalid typically occurs when routing was changed for one part type but not all part types inside of a part type family and an OnEntryWorkflow was executed at a parallel operation.                |
| 365  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 366  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 367  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 368  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 369  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 370  | Error Empty Pallet                                      | Error empty pallet occurs after a divorce and before a marriage when an OnEntryWorkflow is executed.                                                                                                                                                                                                                                                     |
| 371  | Error Routing Bypassed for Area Part Type               | Error routing bypassed for area and part type combination occurs when OnEntryWorkflow is executed and routing is bypassed for area and part type combination.                                                                                                                                                                                            |
| 372  | Error Serial Number Already Completed Operation         | Error serial number already completed operation occurs when OnEntryWorkflow is executed and serial number has already completed operation.                                                                                                                                                                                                               |
| 373  | Error Serial Number Rejected at Previous Operation      | Error serial number rejected at previous operation occurs when OnEntryWorkflow is executed and serial number was rejected at a previous operation.                                                                                                                                                                                                       |
| 374  | Error Serial Number Did Not Complete Previous Operation | Error serial number did not complete a previous operation occurs when OnEntryWorkflow is executed and serial number did not complete previous operation.                                                                                                                                                                                                 |
| 375  | Error Serial Number Exceeded Max Retries at Operation   | Error serial number exceeded max retries at operation occurs when OnEntyWorkflow is executed and serial number has exceeded retries at operation.                                                                                                                                                                                                        |
| 376  | Error Serial Number Exceed Previous Operation Cure Time | Error serial number exceeded previous operation cure time occurs when OnEntryWorkflow is executed and serial number has exceeded previous operation cure time.                                                                                                                                                                                           |
| 377  | Error Serial Number Has Not Exceeded Cool-down Time     | Error serial number has not exceeded cool-down time occurs when OnEntryWorkflow is executed and serial number has not exceeded operation cool-down time.                                                                                                                                                                                                 |
| 378  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 379  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 380  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 381  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 382  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 383  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 384  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 385  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 386  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 387  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 388  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 389  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 390  | Error Serial Number Scrapped                            | Error serial number scrapped is a disposition assigned at tear down for serial numbers that should no longer run on the assembly line without quality's permission.                                                                                                                                                                                      |
| 391  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 392  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 393  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 394  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 395  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 396  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 397  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 398  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 399  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |
| 400  | Spare                                                   |                                                                                                                                                                                                                                                                                                                                                          |


# Contact Us

Data Stream support is available **Monday thru Friday 8 AM to 5 PM EST**.

Receiving support is easy, please use one of the following options:

| Method | Action                                                           | Response Time |
| ------ | ---------------------------------------------------------------- | ------------- |
| E-Mail | [support@getdatastream.com](mailto:%20support@getdatastream.com) | < 24 hours    |
| Phone  | (855) 675-5413                                                   |               |


