Skip to main content

Troubleshooting

When something fails, narrow the problem in this order: installation, host startup, channel open state, protocol response, point value, then UI binding.

Three Quick Checks

  1. Replace the real channel with AddVirtualChannel to verify the application structure.
  2. Print channel.State and confirm it reaches Open.
  3. Print received bytes as hex before trying to parse text.
channel.DataReceived += (_, e) =>
{
Console.WriteLine(Convert.ToHexString(e.Data.Span));
};

Installation and Packages

SymptomLikely causeFix
dotnet is not found.NET SDK is missing or PATH was not refreshedInstall .NET 8 SDK and reopen the terminal
Zeus package is not foundnuget.org is unavailable or the package name is wrongUse dotnet add package Zeus.Communications
AddVirtualChannel is missingZeus.Communications is not referencedInstall the communication package
AttachZeus is missingUI adapter package is missingUse Zeus.Presentation.WinForms or Zeus.Presentation.Wpf
WinForms / WPF restore failsTarget framework is not Windows desktopUse net8.0-windows

Host and Names

SymptomLikely causeFix
Channel xxx cannot be foundChannels.Get uses a different name than registrationCompare with registered names in the exception
Channel name already existsTwo channels have the same Zeus nameRename one, for example meterBus or plcBus
Current state is Created, cannot writeStartAsync was not calledStart the host first
Port stays busy after exitHost was not disposedUse await using or AttachZeus

Serial and TCP

SymptomLikely causeFix
Serial open failsCOM port does not exist or is occupiedCheck Device Manager and close serial tools
Serial opens but no data arrivesWiring, baud rate, parity, or device behavior is wrongVerify with a serial tool first
Received text is garbledBinary protocol was displayed as textInspect raw hex bytes
TCP connect failsIP, port, firewall, or listener is wrongConfirm the port is reachable
Peer disconnects and channel becomes FaultedTCP connection was closedDefault reconnect will retry, or call OpenAsync

Protocol-Specific Checks

ProtocolCommon issueFirst check
Custom frameTimeout waiting for a complete frameHeader, length, checksum, and raw bytes
ModbusTimeout or illegal data addressUnit id, RTU/TCP mode, 0-based address, CRC/MBAP
Mitsubishi MCEnd code or timeoutFrame type, encoding, device code, address base
Siemens S7Handshake or DB read failureIP:102, rack/slot, DB access settings, byte/bit offset
Omron FINSTimeout or end codeUDP/TCP port 9600, node numbers, network numbers
Omron Host LinkTimeout or FCS failureUnit number, serial settings, ASCII @...*\r frame
EtherNet/IPCIP status or timeoutTCP 44818, tag path, data type, external write permission

Points and Acquisition

SymptomLikely causeFix
Point has no valid valueFirst poll has not succeededSubscribe to Points.Changed or use TryGet
Short point name is ambiguousMultiple devices expose the same point nameUse device.point
UI shows an old value with an errorLatest poll failed; last successful value was retainedInspect the point snapshot Error
Bus is overloadedPolling interval is too short or addresses are scatteredIncrease the interval and group addresses

JSON Configuration

SymptomLikely causeFix
Config file not foundWorking directory or copy settings are wrongCheck the absolute path in the exception
Channel is not declaredDevice references a missing channelDeclare the channel before the device
Events disappeared after changing COM portHot reload rebuilt the channel instanceGet the channel again and resubscribe
Polling interval did not changeJSON is invalid or file watching is disabledCheck logs and watch: true

Still Stuck

Join the QQ group 771421105 and include:

  • Zeus version and runtime environment.
  • Channel type: virtual, serial, TCP, or UDP.
  • Serial settings or network address.
  • Raw sent and received bytes.
  • Full exception message.
  • For Modbus: unit id, function code, start address, and quantity.