

The Haiwell AT16S0R is a programmable logic controller (PLC) designed for industrial automation applications. It is equipped with 16 input channels and 16 relay output channels, making it suitable for controlling and monitoring a wide range of devices in industrial environments. The AT16S0R supports various communication protocols, ensuring seamless integration with other devices and systems. Known for its reliability, compact design, and ease of programming, this PLC is an excellent choice for both small-scale and large-scale automation projects.








| Specification | Value |
|---|---|
| Model | Haiwell AT16S0R |
| Input Channels | 16 (Digital Inputs) |
| Output Channels | 16 (Relay Outputs) |
| Input Voltage Range | DC 24V |
| Output Type | Relay (NO/NC contacts) |
| Communication Protocols | Modbus RTU, Modbus TCP, HaiwellBus |
| Power Supply Voltage | DC 24V |
| Power Consumption | ≤ 5W |
| Operating Temperature Range | -20°C to 60°C |
| Storage Temperature Range | -40°C to 70°C |
| Dimensions | 125mm x 90mm x 60mm |
| Mounting Type | DIN Rail |
| Pin Number | Description | Voltage Level |
|---|---|---|
| X0 - X15 | Digital Input Channels (X0-X15) | DC 24V |
| Pin Number | Description | Type |
|---|---|---|
| Y0 - Y15 | Relay Output Channels (Y0-Y15) | NO/NC Contacts |
| Pin Number | Description | Notes |
|---|---|---|
| +24V, GND | Power Supply Input | DC 24V |
| RS485+/- | RS485 Communication Interface | Modbus RTU |
| Ethernet | Ethernet Port | Modbus TCP |
+24V and GND terminals.RS485+ and RS485- terminals to the corresponding terminals of the master device.The Haiwell AT16S0R can communicate with an Arduino UNO via the RS485 interface. Below is an example of Arduino code to read data from the PLC using the Modbus RTU protocol.
#include <ModbusMaster.h>
// Instantiate ModbusMaster object
ModbusMaster node;
// Define RS485 communication pins
#define RE_DE 2 // Pin to control RS485 direction
void preTransmission() {
digitalWrite(RE_DE, HIGH); // Enable transmission mode
}
void postTransmission() {
digitalWrite(RE_DE, LOW); // Enable reception mode
}
void setup() {
// Initialize RS485 direction control pin
pinMode(RE_DE, OUTPUT);
digitalWrite(RE_DE, LOW);
// Initialize serial communication
Serial.begin(9600); // For debugging
Serial1.begin(9600); // RS485 communication
// Configure Modbus communication
node.begin(1, Serial1); // Slave ID = 1
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop() {
uint8_t result;
uint16_t data;
// Read input status from PLC (e.g., X0-X15)
result = node.readDiscreteInputs(0x0000, 16); // Read 16 inputs starting at address 0x0000
if (result == node.ku8MBSuccess) {
// Print the status of the first input (X0)
data = node.getResponseBuffer(0);
Serial.print("Input X0 status: ");
Serial.println(bitRead(data, 0)); // Read bit 0 (X0)
} else {
Serial.println("Failed to read inputs from PLC.");
}
delay(1000); // Wait 1 second before the next read
}
PLC Not Powering On
Inputs Not Detected
Outputs Not Activating
Communication Failure
Can the Haiwell AT16S0R be used with SCADA systems?
What is the maximum current rating for the relay outputs?
Is the Haiwell programming software free?
Can the PLC operate in extreme temperatures?
Does the PLC support analog inputs/outputs?