Skip to content

Module Setting

This document introduces how to setup parameter and data tag point information in configuration for northbound applications and southbound drivers.

TIP

uint16 corresponds to the word type. uint32 corresponds to dword type.

MQTT

The data collected from the device can be transmitted to the mqtt broker through mqtt application, and instructions can be sent to neuron throuth mqtt application.

Parameter Setting

ParameterDescription
client-idMQTT client ID, required
upload-topicSubscription data reporting channel, optional, if not set, the data will be reported under neuron/{client-id}/upload
heartbeat-topicThe channel for heartbeat data reporting, optional, if not set, the data will be reported under neuron/{client-id}/heartbeat
formatThe json format selection of the reported data, required, there are values mode and tags mode, the default is values mode
sslWhether to enable mqtt ssl, default false
hostMQTT Broker host, required
portMQTT Broker port number, required
usernameUsername to use when connecting to the broker, optional
passwordThe password to use when connecting to the broker, optional
caca file, only enabled when the ssl value is true, in which case it is required
certcert file, only enabled when the ssl value is true, optional
keykey file, only enabled when the ssl value is true, optional
keypasskey file password, only enabled when the ssl value is true, optional

Modbus

The modbus protocol includes three drivers: modbus RTU, modbus tcp, and modbus RTU over TCP.Except for the device configuration, the three protocols support the same data types and address formats.

Modbus TCP / Modbus RTU over TCP Parameter Setting

ParameterDescription
connection modeThe way the driver connects to the device, the default is client, which means that the neuron driver is used as the client
hostWhen neuron is used as a client, host means the ip of the remote device. When used as a server, it means the ip used by neuron locally, and 0.0.0.0 can be filled in by default
portWhen neuron is used as client, port means the tcp port of the remote device. When used as a server, it means the tcp port used by neuron locally. default 502
timeoutTimeout for sending requests to the device

Modbus RTU Parameter Setting

ParameterDescription
deviceUse a serial device, e.g."/dev/ttyUSB0"
stopstopbits, default 1
parityparity bit, default 2, which means even parity
baudbaudrate, default 9600
databytesize, default 8
timeoutTimeout for sending requests to the device

Support Data Type

  • INT16
  • INT32
  • UINT16
  • UINT32
  • FLOAT
  • BIT
  • STRING

Address Format

SLAVE!ADDRESS[.BIT][#ENDIAN][.LEN[H][L][D][E]]

SLAVE

Required, Slave is the slave address or site number.

ADDRESS

Required, Address is the register address.The Modbus protocol has four areas, each area has a maximum of 65536 registers, and the address range of each area is shown in the table below. It should be noted that the storage area as large as 65536 is generally not required in practical applications. Generally, PLC manufacturers generally use an address range within 10000. Please pay attention to fill in the correct point address according to the area and function code of the device.

AREAADDRESS RANGEATTRIBUTEREGISTER SIZEFUNCTIONDATA TYPE
coil000001 ~ 065536read/write1bit0x1,0x5,0x0fbit
input100001 ~ 165536read1bit0x2bit
input register300001 ~ 365536read16bit0x4bit,int16,uint16,int32,uint32,float,string
hold register400001 ~ 465536read/write16bit0x3,0x6,0x10bit,int16,uint16,int32,uint32,float,string

TIP

Some device documents use function codes and register addresses to describe instructions. Because register address numbers start from 0, the register address range for each region is 0 to 65535. First, determine the highest digit of the address according to the function code, and add 1 to the register address as the address of Neuron.

example, function is 0x03, and register address is 0, then address used by neuron is 400001. function is 0x02, and register address is 5, then address used by neuron is 100006.

.BIT

Optional, a bit of a register address, for example:

AddressData TypeDescription
1!300004.0bitRefers to station number 1, input area, address 300004, bit 0
1!400010.4bitRefers to station number 1, hold register area, address 400010, bit 4
2!400001.15bitRefers to station number 2, hold register area, address 400001, bit 15

#ENDIAN

Optional, endianness, applicable to int16/uint16/int32/uint32/float data types, see the table below for details.

SymbolendiannessData TypeRemark
#B2,1int16/uint16
#L1,2int16/uint16Leave blank, default byte order
#LL1,2,3,4int32/uint32/floatLeave blank, default byte order
#LB2,1,4,3int32/uint32/float
#BB3,4,1,2int32/uint32/float
#BL4,3,2,1int32/uint32/float

Example:

AddressData TypeDescription
1!300004int16Refers to station number 1, input area, address 300004, endianness is #L
1!300004#Bint16Refers to station number 1, input area, address 300004, endianness is #B
1!300004#Luint16Refers to station number 1, input area, address 300004, endianness is #L
1!400004int16Refers to station number 1, hold register area, address 400004, endianness is #L
1!400004#Lint16Refers to station number 1, hold register area, address 400004, endianness is #L
1!400004#Buint16Refers to station number 1, hold register area, address 400004, endianness is #B
1!300004int32Refers to station number 1, input area, address 300004, endianness is #LL
1!300004#BBuint32Refers to station number 1, input area, address 300004, endianness is #BB
1!300004#LBuint32Refers to station number 1, input area, address 300004, endianness is #LB
1!300004#BLfloatRefers to station number 1, input area, address 300004, endianness is #BL
1!300004#LLint32Refers to station number 1, input area, address 300004, endianness is #LL
1!400004int32Refers to station number 1, hold register area, address 400004, endianness is #LL
1!400004#LBuint32Refers to station number 1, hold register area, address 400004, endianness is #LB
1!400004#BBuint32Refers to station number 1, hold register area, address 400004, endianness is #BB
1!400004#LLint32Refers to station number 1, hold register area, address 400004, endianness is #LL
1!400004#BLfloatRefers to station number 1, hold register area, address 400004, endianness is #BL

.LEN[H][L][D][E]

When the data type is string type, .LEN is a required, indicating the length of bytes that the string needs to occupy. Each register contains H, L, D and E four storage methods, as shown in the table below.

SymbolDescription
HA register stores two bytes, the high byte is in front of the low byte
LA register stores two bytes, the low byte is in front of the high byte
DA register stores one byte, and is stored in the low byte
EA register stores one byte, and is stored in the high byte

Example:

AddressData TypeDescription
1!300001.10StringRefers to station number is 1, input area, the address is 300001, the string length is 10, and endianness is L, the occupied address is 300001-300005
1!300001.10HStringRefers to station number is 1, input area, the address is 300001, the string length is 10, and endianness is H, the occupied address is 300001-300005
1!300001.10LStringRefers to station number is 1, input area, the address is 300001, the string length is 10, and endianness is L, the occupied address is 300001-300005
1!400001.10StringRefers to station number is 1, input area, the address is 400001, the string length is 10, and endianness is L, the occupied address is 400001-400005
1!400001.10HStringRefers to station number is 1, input area, the address is 400001, the string length is 10, and endianness is H, the occupied address is400001 ~ 400005
1!400001.10LStringRefers to station number is 1, input area, the address is 400001, the string length is 10, and endianness is L, the occupied address is 400001-400005
1!400001.10DStringRefers to station number is 1, input area, the address is 400001, the string length is 10, and endianness is D, the occupied address is 400001-400010
1!400001.10EStringRefers to station number is 1, input area, the address is 400001, the string length is 10, and endianness is E, the occupied address is 400001-400010

OPC UA

Parameter Setting

ParameterDescription
endpoint urlThe address of the remote access plc, the default value is opc.tcp://127.0.0.1:4840/
usernameThe user used when connecting to plc
passwordThe password used when connecting to plc
certThe certificate to provide login user authentication
keyThe private key to provide signature and encrypted transmissions

Authentication mode:

  • anonymos, requires OPCUA server to enable anonymous login;
  • username-password, The OPCUA server needs to create a username with access permission. Neuron will automatically match the security Settings of OPCUA server and try to log in.
  • cert-key + anonymos, which requires OPCUA server to enable appropriate security settings and set certificates, and enable anonymous login;
  • cert-key + username-password, the OPCUA server must have created a username with access permission, and enable appropriate security Settings and set the certificate;

Certificate Setting

OPCUA can login to OPC-UA server by user self-signed certificate, certificate and key must meet the following conditions.

  • CERTIFICATE and KEYFILE must be set at the same time
  • Certificate must be generated by X.509v3 standard
  • The SAN field of the Certficate must contain URI:urn:xxx.xxx.xxx, with the "xxx" part being a custom part
  • Certificate file and key file must be encoded with DER format

The certificate file can be imported into the target server in advance and set as trust, or it can be set by neuron and submitted automatically and then set as trust by the server.

Certificate generation steps(Windows/Linux/Mac):

sh
$openssl req -config localhost.cnf -new -nodes -x509 -sha256 -newkey rsa:2048 -keyout localhost.key -days 365 -subj "/C=DE/O=neuron/CN=NeuronClient@localhost" -out localhost.crt
$openssl x509 -in localhost.crt -outform der -out client_cert.der
$openssl rsa -inform PEM -in localhost.key -outform DER -out client_key.der
$rm localhost.crt
$rm localhost.key

The *.cnf file specified by -config can be modified using the template file for openssl to be modified to include the following configuration section:

sh
[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[ alt_names ]
URI.1 = urn:xxx.xxx.xxx
DNS.1 = localhost
#DNS.2 = localhost
IP.1 = 127.0.0.1
#IP.2 = 0.0.0.0

-days can set the value as desired.

Certificate conversion

You can convert PEM certificate and private key to DER format by following steps and commands

  1. Save all the contents including "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----" as 1.crt;
  2. Save all the contents including "-----BEGIN PRIVATE KEY-----" and "-----END PRIVATE KEY-----" as 1.key;
  3. Execute the following command:
sh
openssl x509 -in 1.crt -outform der -out cert.der   
openssl rsa -inform PEM -in 1.key -outform DER -out key.der

Support Data Type

  • INT8 (OPCUA SBYTE type)
  • INT16
  • INT32
  • INT64
  • UINT8 (OPCUA BYTE type)
  • UINT16
  • UINT32 (also used to represent DATETIME types)
  • UINT64
  • FLOAT
  • DOUBLE
  • BOOL
  • STRING

Addresses Format

IX!NODEID

IX is the namespace index.

NODEID is the node id.

Example:

AddressData TypeDescription
0!2258UINT32Get the timestamp of the OPCUA server using the NODEID of the numeric type. NS is 0, and NODEID is 2258
2!Device1.Module1.Tag1INT8Get a data point of type SBYTE using a NODEID of type string. NS is 2, and NODEID is Device1.module1.tag1

TIP

Please refer to OPC UA standard for the explanation of namespace index and node id.

The data type set by Neuron must match the OPCUA data type.

Siemens S7 ISOTCP

The s7comm plugin is used for Siemens PLCs with network port, such as s7-200/300/400/1200/1500.

Parameter Setting

ParameterDescription
hostremote plc ip
portremote plc port, default 102
rackplc rack number, default 0
slotplc cpu slot, default 1

TIP

When using the S7COMM plugin to access the S7 1200/1500 PLC, you need to use Siemens software(TIA16) to make some settings for the PLC.( For detailed settings, please refer to plc-settings. )

  • The optimized block access must be turned off.
  • The access level must be "full" and the "connection mechanism" must allow GET/PUT.

Support Data Type

  • INT16
  • UINT16
  • INT32
  • UINT32
  • FLOAT
  • DOUBLE
  • BIT
  • STRING

Address Format

AREA ADDRESS[.BIT][.LEN]

AREA ADDRESS

AREADATA TYPEATTRIBUTEREMARK
Iint16/uint16/bitreadinput
Oint16/uint16/bitread/writeoutput
Fint16/uint16/bitread/writeflag
Tint16/uint16read/writetimer
Cint16/uint16read/writecounter
DBint16/uint16/bit/int32/uint32/float/double/stringread/writeglobal DB block

Example:

AddressData TypeDescription
I0int16I area, address is 0
I1uint16I area, address is 1
O2int16O area, address is 2
O3uint16O area, address is 3
F4int16F area, address is 0
F5int16F area, address is 0
T6int16T area, address is 0
T7int16T area, address is 0
C8uint16C area, address is 0
C9uint16C area, address is 0
DB10.DBW10int16In a data block of 10 , the starting data word is 10
DB12.DBW10uint16In a data block of 12 , the starting data word is 10
DB10.DBW10floatIn a data block of 10 , the starting data word is 10
DB11.DBW10doubleIn a data block of 11 , the starting data word is 10

.BIT

Optional, referring to a bit of an address.

Example:

AddressData TypeDescription
I0.0bitI area, address 0, bit 0
I0.1bitI area, address 0, bit 1
O1.0bitO area, address 1, bit 0
O1.2bitO area, address 1, bit 2
F2.1bitF area, address 2, bit 1
F2.2bitF area, address 2, bit 2
T3.3bitT area, address 3, bit 3
T3.4bitT area, address 3, bit 4
C4.5bitC area, address 4, bit 5
C4.6bitC area, address 4, bit 6
DB1.DBW10.1bitIn a data block of 1 , the starting data word is 10, bit 0
DB2.DBW1.15bitIn a data block of 2 , the starting data word is 1, bit 15

.LEN

When the data type is a string type, it is required and indicates the length of the string.

Example:

AddressData TypeDescription
DB1.DBW12.20stringIn a data block of 1 , the starting data word is 12, string length is 20

OMRON FINS on TCP

The fins plugin is used for Omron PLCs with network port, such as CP2E.

Parameter Setting

ParameterDescription
hostremote plc ip
portremote plc port, default 9600 |

Support Data Type

  • UINT8
  • INT8
  • INT16
  • UINT16
  • INT32
  • UINT32
  • FLOAT
  • DOUBLE
  • BIT
  • STRING

Address Format

AREA ADDRESS[.BIT][.LEN[H][L]]

AREA ADDRESS

AREADATA TYPEATTRIBUTEREMARK
CIOAll types except uint8/int8read/writeCIO Area
AAll types except uint8/int8readAuxiliary Area
WAll types except uint8/int8read/writeWork Area
HAll types except uint8/int8read/writeHolding Area
DAll types except uint8/int8read/writeData Memory Area
PAll types except uint8/int8, but bit only supports readread/writePVs
Fint8/uint8readFlag Area
EMAll types except uint8/int8read/writeExtended Memory

Example:

AddressData TypeDescription
F0uint8F area, address is 0
F1int8F area, address is 1
CIO1int16CIO area, address is 1
CIO2uint16CIO area, address is 2
A2int32A area, address is 2
A4uint32A area, address is 4
W5floatW area, address is 5
W10floatW area, address is 10
H20doubleH area, address is 20
H30uint32H area, address is 30
D10int32D area, address is 10
D20floatD area, address is 20
EM10W100floatEM10 area, address is 100

.BIT

Optional, referring to a bit of an address.

Example:

AddressData TypeDescription
CIO0.0bitCIO area, address is 0, bit 0
CIO1.2bitCIO area, address is 1, bit 2
A2.1bitA area, address is 2, bit 1
A2.3bitA area, address is 2, bit 3
W3.4bitW area, address is 3, bit 4
W3.0bitW area, address is 3, bit 0
H4.15bitH area, address is 4, bit 15
H4.10bitH area, address is 4, bit 10
D5.2bitD area, address is 5, bit 2
D5.3bitD area, address is 5, bit 3
EM10W100.0bitEM10 area, address is 100, bit 0

.LEN[H][L]

When the data type is string type, it is a required, .LEN indicates the length of the string, including H and L two endianness, the default is H .

Example:

AddressData TypeDescription
CIO0.20stringCIO area, address 0, the string length is 20 bytes and the endianness is L
CIO1.20HstringCIO area, address 1, the string length is 20 bytes and the endianness is H
A2.10LstringA area, address 2, the string length is 10 bytes and the endianness is L
A2.30stringA area, address 2, the string length is 30 bytes and the endianness is L
W3.40HstringW area, address 3, the string length is 40 bytes and the endianness is H
W3.10stringW area, address 3, the string length is 10 bytes and the endianness is L
H4.15LstringH area, address 4, the string length is 15 bytes and the endianness is L
H4.10stringH area, address 4, the string length is 10 bytes and the endianness is L
D5.20HstringD area, address 5, the string length is 20 bytes and the endianness is H
D5.30stringD area, address 5, the string length is 30 bytes and the endianness is L
EM10.10stringEM area, address 10, the string length is 10 bytes and the endianness is L

Mitsubishi MELSEC-Q E71

The qna3e plugin is used to access Mitsubishi's QnA compatible PLCs via Ethernet, including Q series (MC), iQ-F series (SLMP) and iQ-L series.

Parameter Setting

ParameterDescription
hostremote plc ip
portremote plc port, default 2000

Support Data Type

  • INT16
  • UINT16
  • INT32
  • UINT32
  • FLOAT
  • DOUBLE
  • BIT
  • STRING

Address Format

AREA ADDRESS[.BIT][.LEN[H][L]]

AREA ADDRESS

AREADATA TYPEATTRIBUTEREMARK
Xbitread/writeInput relay (Q/iQ-F)
DXbitread/write(Q/iQ-F)
Ybitread/writeOutput relay (Q/iQ-F)
DYbitread/write(Q/iQ-F)
Bbitread/writeLink relay (Q/iQ-F)
SBbitread/writeLink special relay
Mbitread/writeInternal relay (Q/iQ-F)
SMbitread/writeSpecial relay (Q/iQ-F)
Lbitread/writeLatch relay (Q/iQ-F)
Fbitread/writeAnnunciator (Q/iQ-F)
Vbitread/writeEdge relay (Q/iQ-F)
Sbitread/write(Q/iQ-F)
TSbitread/writeTimer Contact (Q/iQ-F)
TCbitread/writeTimer Coil (Q/iQ-F)
SSbitread/write(Q/iQ-F)
STSbitread/writeRetentive timer Contact (Q/iQ-F)
SCbitread/write(Q/iQ-F)
CSbitread/writeCounter Contact (Q/iQ-F)
CCbitread/writeCounter Coil (Q/iQ-F)
TNallread/writeTimer Current value (Q/iQ-F)
STNallread/writeRetentive timer (Q/iQ-F)
SNallread/write(Q/iQ-F)
CNallread/writeCounter Current value (Q/iQ-F)
Dallread/writeData register (Q/iQ-F)
DSH--
DSL--
SDallread/writeSpecical register (Q/iQ-F)
Wallread/writeLink register (Q/iQ-F)
WSH--
WSL--
SWallread/writeLink special register (Q/iQ-F)
Rallread/writeFile register (Q/iQ-F)
ZRallread/writeFile register (Q/iQ-F)
RSH--
ZRSH--
RSL--
ZRSL--
Zallread/writeIndex register (Q/iQ-F)

Example:

AddressData TypeDescription
X0bitX area, address is 0
X1bitX area, address is 1
Y0bitY area, address is 0
Y1bitY area, address is 1
D100int16D area, address is 100
D1000uint16D area, address is 1000
D200uint32D area, address is 200
D10floatD area, address is 10
D20doubleD area, address is 20

.BIT

It can only be used in non-bit type area, which means to read the specified bit of the specified address, and the binary bit index range is [0, 15].

AddressData TypeDescription
D20.0bitD area, address is 20, bit 0
D20.2bitD area, address is 20, bit 2

.LEN[H][L]

When the data type is string, .LEN indicates the length of the string; H and L can be optional to indicate two byte orders, the default is H byte order.

Example:

AddressData TypeDescription
D1002.16LstringD area, address is 1002, string length is 16, endianness is L
D1003.16stringD area, address is 1003, string length is 16, endianness is H

IEC 60870-5-104

Parameter Setting

ParameterDescription
hostdevice ip
portdevice port, default 2404
cacommon address
intervalstation interrogation interval

Support Data Type

  • uint16
  • int16
  • float
  • bit

Address Format

IOA

IEC 60870-5-104 TYPEIDNEURON TYPE
M_ME_NB_1、M_ME_TE_1uint16/int16
M_ME_NC_1、M_ME_TF_1float
M_SP_NA_1、M_SP_TB_1bit
M_ME_NA_1、M_ME_TD_1、M_ME_ND_1uint16/int16

KNXnet/IP

Support Data Type

  • bit
  • bool
  • int8
  • uint8
  • int16
  • uint16
  • float

Address Format

Two address formats

  • GROUP_ADDRESS

Represents the KNX group address, which can only be written in Neuron, and KNX devices belonging to this group will react to messages sent to this group.

Example:

0/0/1 is a KNX group address and is write only in Neuron, KNX devices belonging to this group will react to messages sent to this group.

  • GROUP_ADDRESS,INDIVIDUAL_ADDRESS

Represents a KNX individual address that is a member of the group address, and is read only in Neuron.

Example:

0/0/1,1.1.1 represents a KNX individual address 1.1.1 that is a member of the group address 0/0/1, and is read only in Neuron.

BACnet/IP

Parameter Setting

ParameterDescription
hostBACnet device ip
portBACnet device port, default 47808

Support Data Type

  • float
  • bit

Address Format

AREA[ADDRESS]

AREAADDRESS RANGEATTRIBUTEDATA TYPEREMARK
AI0 - 0x3fffffreadfloatanalog input
AO0 - 0x3fffffread/writefloatanalog output
AV0 - 0x3fffffread/writefloatanalog value
BI0 - 0x3fffffreadbitbinary input
BO0 - 0x3fffffread/writebitbinary output
BV0 - 0x3fffffread/writebitbinary value
MSI0 - 0x3fffffreadbitmulti state input
MSO0 - 0x3fffffread/writebitmulti state output
MSV0 - 0x3fffffread/writebitmulti state value

Example:

AddressData TypeDescription
AI0floatAI area, address is 0
AI1floatAI area, address is 1
BO10floatBO area, address is 10
BO20floatBO area, address is 20
AV30floatAV area, address is 30
BI0bitBI area, address is 0
BI1bitBI area, address is 1
BV3bitBV area, address is 3
MSI10bitMAI area, address is 10
MSI20bitMSI area, address is 20
MSI30bitMSI area, address is 30

DL/T645-2007

The dlt645 protocol supports serial and tcp connection.

Parameter Setting

serial

ParameterDescription
deviceUse a serial device, e.g."/dev/ttyUSB0"
stopstopbits, default 1
parityparity bit, default 2, which means even parity
baudbaudrate, default 9600
databytesize, default 8
timeoutTimeout for sending requests to the device

TCP

ParameterDescription
connection modeThe way the driver connects to the device, the default is client, which means that the neuron driver is used as the client
hostWhen neuron is used as a client, host means the ip of the remote device. When used as a server, it means the ip used by neuron locally, and 0.0.0.0 can be filled in by default
portWhen neuron is used as client, port means the tcp port of the remote device. When used as a server, it means the tcp port used by neuron locally. default 502
timeoutTimeout for sending requests to the device

Support Data Type

  • DOUBLE

Address Format

DATA

DATA

Data represents data identification.

DATA RANGEATTRIBUTE
00 zz zz ffread
02 zz zz ffread
04 00 3~9 ffread

Sparkplug_B

Data collected by Neuron from the device can be transmitted from the edge to the Sparkplug_B application using the Sparkplug_B protocol. Users can also send data modification instructions to Neuron from the application. Sparkplug_B is an application-type protocol that runs on top of MQTT, so the setup in Neuron is similar to the MQTT driver.

Parameter Setting

ParameterDescription
group-idThe top-level logical group in Sparkplug_B, which can represent an entity such as a factory or workshop, required
client-idMQTT client ID, A unique identifier that can represent the edge end, required
sslWhether to enable mqtt ssl, default false
hostMQTT Broker host, required
portMQTT Broker port number, required
usernameUsername to use when connecting to the broker, optional
passwordThe password to use when connecting to the broker, optional
caca file, only enabled when the ssl value is true, in which case it is required
certcert file, only enabled when the ssl value is true, optional
keykey file, only enabled when the ssl value is true, optional
keypasskey file password, only enabled when the ssl value is true, optional

NON A11

The non a11 plugin is used for NON-A11 device.

Parameter Setting

ParameterDescription
connection modeThe way the driver connects to the device, the default is client, which means that the neuron driver is used as the client
hostWhen neuron is used as a client, host means the ip of the remote device. When used as a server, it means the ip used by neuron locally, and 0.0.0.0 can be filled in by default
portWhen neuron is used as client, port means the tcp port of the remote device. When used as a server, it means the tcp port used by neuron locally.
siteNON-A11 device site number.

Support Data Type

  • INT16
  • UINT16
  • INT32
  • UINT32
  • FLOAT
  • STRING

Address Format

COMMAND ! OFFSET[.LEN]

Example:

AddressData TypeDescription
1!10.20stringcommand 1, offset 10, string length 20
12!1uint16/int16command 12, offset 1
20!32uint32/int32/floatcommand 20, offset 32