Minor improvements
This commit is contained in:
parent
0c4ea8c13f
commit
e534955938
6 changed files with 16 additions and 16 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*@!Encoding:1252*/
|
/*@!Encoding:1252*/
|
||||||
|
|
||||||
// This file is the Modbus Client for Airbus CIDS
|
// This file is the Modbus Client for Airbus CIDS
|
||||||
// It automatically and periodically reads all input bits and registers and writes them to SysVars %BUSTYPE%::%NODE_NAME%::Data
|
// It automatically and periodically reads all input bits and registers and writes them to SysVars Modbus::%NODE_NAME%::Data
|
||||||
// It also reacts on changes in the output SysVars and write those to the Modbus device.
|
// It also reacts on changes in the output SysVars and write those to the Modbus device.
|
||||||
|
|
||||||
includes
|
includes
|
||||||
|
|
|
@ -203,17 +203,18 @@ void _DeviceParseCode(word dev, enum Vendor vendor, struct deviceIOs dios)
|
||||||
case 556:
|
case 556:
|
||||||
input = 0;
|
input = 0;
|
||||||
numChannels = 2;
|
numChannels = 2;
|
||||||
|
break;
|
||||||
case 555: // devices that have 4 outputs
|
case 555: // devices that have 4 outputs
|
||||||
case 553:
|
case 553:
|
||||||
case 557:
|
case 557:
|
||||||
case 559:
|
case 559:
|
||||||
input = 0;
|
input = 0;
|
||||||
numChannels = 4;
|
numChannels = 4;
|
||||||
|
break;
|
||||||
default: // unknown device
|
default: // unknown device
|
||||||
writeDbg(AlgoInfo, "Connected device: 750-%d", dev);
|
writeDbg(AlgoInfo, "Connected device: 750-%d", dev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Prepare the format string
|
|
||||||
}
|
}
|
||||||
break; // switch(vendor)
|
break; // switch(vendor)
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -187,7 +187,7 @@ void _ModbusReadBits(enum ModbusFuncCode funcCode, word address, long count)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FC1: Read Coils (DO), FC2: Read Discret Inputs (DI)
|
// FC 0x01: Read Coils (DO), FC 0x02: Read Discret Inputs (DI)
|
||||||
while (count > 0 && address < devEndAddr)
|
while (count > 0 && address < devEndAddr)
|
||||||
{
|
{
|
||||||
curCount = count > gMaxBitsPerRead ? gMaxBitsPerRead : count; // divide packets that are too large
|
curCount = count > gMaxBitsPerRead ? gMaxBitsPerRead : count; // divide packets that are too large
|
||||||
|
@ -226,7 +226,7 @@ void _OnModbusReceiveBits(byte buffer[])
|
||||||
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer);
|
||||||
|
|
||||||
writeDbg(MbInfo, "Received %d bits from 0x%04X", mbreq.Count, mbreq.Address);
|
writeDbg(MbInfo, "Received %d bits from 0x%04X", mbreq.Count, mbreq.Address);
|
||||||
for (i = 0; i < mbres.ByteCount; i++)
|
for (i = 0; i < mbres.ByteCount; i++) // decode the received data
|
||||||
{
|
{
|
||||||
for (j = 0; j < 8; j++)
|
for (j = 0; j < 8; j++)
|
||||||
{
|
{
|
||||||
|
@ -289,7 +289,7 @@ void _ModbusReadRegisters(enum ModbusFuncCode funcCode, word address, long count
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
devStartAddr = funcCode == ReadRegistersOut ? thisDev.Addr.Read.OutputRegisters : thisDev.Addr.Read.InputRegisters; // The start address of the bits
|
devStartAddr = funcCode == ReadRegistersOut ? thisDev.Addr.Read.OutputRegisters : thisDev.Addr.Read.InputRegisters; // The start address of the registers
|
||||||
devEndAddr = devStartAddr + thisDev.MaxRegisterCount; // The address behind the last register
|
devEndAddr = devStartAddr + thisDev.MaxRegisterCount; // The address behind the last register
|
||||||
if (address >= devEndAddr)
|
if (address >= devEndAddr)
|
||||||
devEndAddr = 0xFFFF; // Some other address. We might be reading extra registers (no input)
|
devEndAddr = 0xFFFF; // Some other address. We might be reading extra registers (no input)
|
||||||
|
@ -300,7 +300,7 @@ void _ModbusReadRegisters(enum ModbusFuncCode funcCode, word address, long count
|
||||||
OnModbusClientPanics(AddressFailure);
|
OnModbusClientPanics(AddressFailure);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// FC3: Read Holding Registers (AO), FC4: Read Input Registers (AI)
|
// FC 0x03: Read Holding Registers (AO), FC 0x04: Read Input Registers (AI)
|
||||||
while (count > 0 && address < devEndAddr)
|
while (count > 0 && address < devEndAddr)
|
||||||
{
|
{
|
||||||
curCount = count > gMaxRegsPerRead ? gMaxRegsPerRead : count; // divide packets that are too large
|
curCount = count > gMaxRegsPerRead ? gMaxRegsPerRead : count; // divide packets that are too large
|
||||||
|
@ -309,7 +309,6 @@ void _ModbusReadRegisters(enum ModbusFuncCode funcCode, word address, long count
|
||||||
writeDbg(MbWarning, "_ModbusReadBits: Impossible to read %d bits at 0x%04X. Changed count to %d.", curCount, address, devEndAddr - address);
|
writeDbg(MbWarning, "_ModbusReadBits: Impossible to read %d bits at 0x%04X. Changed count to %d.", curCount, address, devEndAddr - address);
|
||||||
curCount = devEndAddr - address;
|
curCount = devEndAddr - address;
|
||||||
}
|
}
|
||||||
//write("address = 0x%04X, count = %d, curCount = %d, devStartAddr = 0x%04X, devEndAddr = 0x%04X", address, count, curCount, devStartAddr, devEndAddr);
|
|
||||||
|
|
||||||
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
||||||
|
|
||||||
|
@ -366,7 +365,7 @@ void ModbusWriteBit(word address, byte value)
|
||||||
if (value >= 1)
|
if (value >= 1)
|
||||||
value = 0xFF;
|
value = 0xFF;
|
||||||
|
|
||||||
// FC5: Write Single Coil (DO)
|
// FC 0x05: Write Single Coil (DO)
|
||||||
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
||||||
|
|
||||||
mbreq.Address = address; // [2] Output address
|
mbreq.Address = address; // [2] Output address
|
||||||
|
@ -414,7 +413,7 @@ void ModbusWriteRegister(word address, word value)
|
||||||
byte buffer[length];
|
byte buffer[length];
|
||||||
struct ModbusReqWriteSingle mbreq;
|
struct ModbusReqWriteSingle mbreq;
|
||||||
|
|
||||||
// 5: Write Single Register (AO)
|
// FC 0x06: Write Single Register (AO)
|
||||||
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
||||||
|
|
||||||
mbreq.Address = address; // [2] Output address
|
mbreq.Address = address; // [2] Output address
|
||||||
|
@ -478,7 +477,7 @@ void ModbusWriteBits(word address, long count, byte values[])
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FC15: Write Multiple Bits (DOs)
|
// FC 0x0F: Write Multiple Bits (DOs)
|
||||||
offset = 0;
|
offset = 0;
|
||||||
while (count > 0 && (address + offset) < devEndAddr)
|
while (count > 0 && (address + offset) < devEndAddr)
|
||||||
{
|
{
|
||||||
|
@ -612,7 +611,7 @@ void ModbusWriteRegisters(word address, long count, word values[])
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FC16: Write Multiple Registers (AOs)
|
// FC 0x10: Write Multiple Registers (AOs)
|
||||||
offset = 0;
|
offset = 0;
|
||||||
while (count > 0 && (address + offset) > devEndAddr)
|
while (count > 0 && (address + offset) > devEndAddr)
|
||||||
{
|
{
|
||||||
|
@ -687,7 +686,7 @@ void ModbusWriteMasks(word address, word and, word or)
|
||||||
byte buffer[length];
|
byte buffer[length];
|
||||||
struct ModbusReqWriteMasks mbreq;
|
struct ModbusReqWriteMasks mbreq;
|
||||||
|
|
||||||
// FC22: Mask Write Registers (AO)
|
// FC 0x16: Mask Write Registers (AO)
|
||||||
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
_ModbusMakeHeader(mbreq.Header, length, funcCode);
|
||||||
|
|
||||||
mbreq.Address = address; // [2] Output address
|
mbreq.Address = address; // [2] Output address
|
||||||
|
@ -754,7 +753,7 @@ void ModbusReadWriteRegisters(word readAddress, long readCount, word writeAddres
|
||||||
dataLength = 2 * writeCount;
|
dataLength = 2 * writeCount;
|
||||||
overallLength = maxLength - 2*(gMaxRegsPerWrite-2) + dataLength;
|
overallLength = maxLength - 2*(gMaxRegsPerWrite-2) + dataLength;
|
||||||
|
|
||||||
// FC16: Write Multiple Registers (AOs)
|
// FC 0x17: Write Multiple Registers (AOs)
|
||||||
_ModbusMakeHeader(mbreq.Header, overallLength, funcCode);
|
_ModbusMakeHeader(mbreq.Header, overallLength, funcCode);
|
||||||
|
|
||||||
mbreq.ReadAddress = readAddress; // [2] Input address
|
mbreq.ReadAddress = readAddress; // [2] Input address
|
||||||
|
|
|
@ -93,7 +93,7 @@ word _ModbusConnectTo(dword remoteIp, word remotePort)
|
||||||
EthCompletePacket(gPacket);
|
EthCompletePacket(gPacket);
|
||||||
EthOutputPacket(gPacket);
|
EthOutputPacket(gPacket);
|
||||||
EthReleasePacket(gPacket);
|
EthReleasePacket(gPacket);
|
||||||
gSocketState = NULL;
|
gSocketState = CONNECTING;
|
||||||
gtModbusArp.set(@sysvar::Config::Modbus::RequestTimeout);
|
gtModbusArp.set(@sysvar::Config::Modbus::RequestTimeout);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*@!Encoding:1252*/
|
/*@!Encoding:1252*/
|
||||||
|
|
||||||
// This file connected functions that abstract the UDP/IP API
|
// This file contains functions that abstract the UDP/IP API
|
||||||
/// It provides following methods
|
/// It provides following methods
|
||||||
/// - _ModbusConnectTo() Prepare anything that sending works. Here: Open a TCP socket and connection
|
/// - _ModbusConnectTo() Prepare anything that sending works. Here: Open a TCP socket and connection
|
||||||
/// - _ModbusDisconnect() Gracefully disconnect from the device. Here: Close the TCP connection and socket
|
/// - _ModbusDisconnect() Gracefully disconnect from the device. Here: Close the TCP connection and socket
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*@!Encoding:1252*/
|
/*@!Encoding:1252*/
|
||||||
|
|
||||||
// This file connected functions that abstract the UDP/IP API
|
// This file contains functions that abstract the UDP/IP API
|
||||||
/// It provides following methods
|
/// It provides following methods
|
||||||
/// - ModbusConnectTo() Prepare anything that sending works. Here: Open a UDP socket
|
/// - ModbusConnectTo() Prepare anything that sending works. Here: Open a UDP socket
|
||||||
/// - ModbusDisconnect() Gracefully disconnect from the device. Here: Close the UDP socket
|
/// - ModbusDisconnect() Gracefully disconnect from the device. Here: Close the UDP socket
|
||||||
|
|
Loading…
Reference in a new issue