Skip to content

Hormel Beloit

Configuration Disclaimer: The configuration values shown here are based on repository reference files. Production configurations may differ. Always verify against the actual appsettings.json on the production machine.

Quick Reference

Field Value
Site Hormel -- Beloit, WI
Validation Mode AV50
Version beloit-v0.136
Config File appsettings-hormel-beloit.json
Controller Arduino Portenta H7 (TCP)

Hardware Inventory

Device Type Connection Address
Front Camera Cognex DataMan TCP 192.168.100.201:23
Side Camera Cognex DataMan TCP 192.168.100.200:23
Controller Arduino Portenta H7 TCP 192.168.100.100:502
Camera Listener Push mode (TCP push only) TCP 0.0.0.0:3000

Camera Configuration

Camera Role Min. Barcodes Trigger Mode
Front-Camera Front 1 Hardware (photo-eye)
Side-Camera Side 1 Hardware (photo-eye)

Arduino Pin Map

Pin Function
0 RejectSignal
1 MachineStop
2 Stack Light Green
3 Stack Light Yellow
4 Stack Light Red

Key Settings

Setting Value
Auto-start validation Yes
Camera mode Both (Front + Side)
Stack Light Profile AV50
Failures before stop 3
Multi-cam aggregation timeout 200ms (tuned for high-speed)
Multi-cam post-validation lockout 400ms (tuned for high-speed)
Horn on fail No

Normal Operating State

When everything is working correctly at Beloit:

  • Screen: GateKeeper application shows "AV50" validation mode. Both cameras and the Arduino show connected. Camera mode dropdown shows "Both Cameras."
  • Stack lights: AV50 profile -- Green ON during active validation. No horn on pass or fail.
  • Auto-start: Validation starts automatically on application launch.
  • Speed: This site runs at 100+ cases per minute (PPM). The aggregation and lockout timers are specially tuned for this speed.
  • Push mode only: Cameras push barcode data via TCP to port 3000. The application does NOT use telnet (port 23) for barcode data -- telnet is only for camera status checks.

Validation Flow

  1. Application launches and auto-starts validation in AV50 mode.
  2. A case passes through the photo-eye, triggering both cameras.
  3. Cameras push barcode data via TCP to port 3000 (CognexDataListener).
  4. The multi-camera aggregator collects data with a 200ms timeout (fast -- tuned for 100+ PPM).
  5. AV50 validator checks that each camera has read at least 1 valid barcode.
  6. PASS: Green flash. FAIL: Red flash (no horn), reject signal fires.
  7. A 400ms lockout prevents duplicate validations at high speed.

Common Issues

Duplicate Validations

What you see: A single case is validated twice, or extra validations appear in the history.

What to check: - This was a known issue fixed in v0.135. In Push mode, the system previously subscribed to BOTH the telnet connection AND the TCP push listener, causing double triggers. - If you see this issue, verify the version is beloit-v0.136 or later. - Push mode now uses only CognexDataListener (port 3000) for barcode data.

Single-Camera Mode Always Fails

What you see: When set to "Front Camera Only" or "Side Camera Only," all validations fail even though the selected camera is reading barcodes.

What to check: - This was a known bug fixed in v0.136. Barcodes from TCP push had CameraIndex=0 (default), so Side camera barcodes were counted as Front. - If you see this issue, verify the version is beloit-v0.136. - The fix sets CameraIndex based on the source camera's IP address before validation.

Arduino Communication Failures at High Speed

What you see: Stack lights are unresponsive, or the log shows "Arduino command failed" entries.

What to check: - At 100+ PPM, the Arduino can receive many commands per second. v0.131 added state deduplication to reduce command flooding. - If the Arduino appears unresponsive, check that the TCP connection is still active (Diagnostics panel). - The reinforcement timer is set to 500ms to avoid overloading the Arduino. - Try restarting the application if the Arduino connection appears stuck.

JSON Parse Failures in Logs

What you see: Log entries showing JSON parse errors like {"status":"ok"}{"status":"ok"}.

What to check: - This was fixed in v0.131. At high speed, TCP buffer concatenation caused multiple JSON responses to merge. - The fix extracts the first complete JSON object from the buffer. - If you see this error frequently, it may indicate the Arduino is overloaded.

Known Quirks

  • High-speed tuning: Beloit runs at 100+ PPM, so timing values are much lower than other sites. The 200ms aggregation timeout and 400ms lockout are intentional. Do not increase these without testing at full line speed.
  • Push mode only: Unlike other sites, Beloit uses TCP push mode exclusively. The telnet connection to the cameras (port 23) is used ONLY for status checks, not for barcode data. This is to prevent double-trigger issues.
  • Extensive bug fix history: Beloit has had more bug fixes than other sites (v0.127 through v0.136) due to the high-speed requirements. See DEPLOYMENTS.md for full history.
  • No horn: Same as Austin -- horn is disabled for AV50 at this site.
  • Camera comm scripts required: The Cognex cameras must have communication scripts with onDecode handlers to push barcode data via TCP. See docs/COGNEX_COMM_SCRIPTS.md if camera scripts need to be reconfigured.