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.jsonon 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¶
- Application launches and auto-starts validation in AV50 mode.
- A case passes through the photo-eye, triggering both cameras.
- Cameras push barcode data via TCP to port 3000 (CognexDataListener).
- The multi-camera aggregator collects data with a 200ms timeout (fast -- tuned for 100+ PPM).
- AV50 validator checks that each camera has read at least 1 valid barcode.
- PASS: Green flash. FAIL: Red flash (no horn), reject signal fires.
- 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
onDecodehandlers to push barcode data via TCP. See docs/COGNEX_COMM_SCRIPTS.md if camera scripts need to be reconfigured.
Related Documentation¶
- Hormel Austin -- Sister AV50 site
- Hormel Barron -- Sister AV50 site (Teguar hardware)
- AV50 Validation Mode
- Cognex DataMan Cameras
- Arduino Portenta Controller