FB_SMISlaveIdCompare

FB_SMISlaveIdCompare 1:

A specified slave ID (32-bit key ID) is compared with the slave ID (32-bit key ID) of one or more drives which is defined on the motor side. The command can also be sent also to several SMI slaves.

The result of the query is forwarded by four outputs. Each of these outputs can assume three states:

Some examples of this are explained further below.

VAR_INPUT

bStart                 : BOOL;
dwAddr                 : DWORD := 0;
eAddrType              : E_SMIAddrType := eSMIAddrTypeAddress;
dwAddrOption           : DWORD := 0;
eCommandPriority       : E_SMICommandPriority := eSMICommandPriorityMiddle;
dwSlaveId              : DWORD := 0;

bStart: the function block is started, and the command is sent on applying a positive edge to this input.

dwAddr: manufacturer code (0-15), address of a device (0-15), bit field (16 bits) for the group addressing or slave ID (32-bit key ID). This input has no meaning if a collective call (broadcast) is sent.

eAddrType: defines whether the dwAddr input is to be evaluated as a manufacturer code, the address of a device, for group addressing or as a slave ID.

dwAddrOption: if the SMI device is addressed by slave ID (eAddrType = eSMIAddrTypeSlaveId), then the manufacturer code must be specified via this input.

eCommandPriority: priority (high, medium or low) with which the command is processed by the PLC library.

dwSlaveId: the Slave ID with which the Slave ID on the motor side is compared.

VAR_OUTPUT

bBusy                                 : BOOL;
bError                                : BOOL;
udiErrorId                            : UDINT;
eResSlaveAddrET0AndSlaveIdLTSerachId  : E_SMICompResSlaveAddrET0AndSlaveIdLTSearchId;
eResSlaveAddrET0AndSlaveIdGTSerachId  : E_SMICompResSlaveAddrET0AndSlaveIdGTSearchId;
eResSlaveAddrET0AndSlaveIdETSerachId  : E_SMICompResSlaveAddrET0AndSlaveIdETSearchId;
eResSlaveAddrNE0                      : E_SMICompResSlaveAddrNE0;

bBusy: when the function block is activated the output is set, and it remains active until execution of the command has been completed.

bError: this output is switched to TRUE as soon as an error occurs during the execution of a command. The command-specific error code is contained in udiErrorId. The output is set back to FALSE by the reactivation of the function block via the bStart input.

udiErrorId: contains the command-specific error code of the most recently executed command. It is set back to 0 by the reactivation of the function block via the bStart input. See Error codes.

eResSlaveAddrET0AndSlaveIdLTSerachId: at least one motor / no motor has the address 0 and the slave ID is smaller than the slave ID sought (dwSlaveId) / the value is undefined.

eResSlaveAddrET0AndSlaveIdGTSerachId: at least one motor / no motor has the address 0 and the slave ID is larger than the slave ID sought (dwSlaveId) / the value is undefined.

eResSlaveAddrET0AndSlaveIdETSerachId: at least one motor / no motor has the address 0 and the slave ID is also the same as the slave ID sought (dwSlaveId) / the value is undefined.

eResSlaveAddrNE0: at least one motor / no motor has an address unequal 0 / the value is undefined.

VAR_IN_OUT

stCommandBuffer            : ST_SMICommandBuffer;

stCommandBuffer: reference to the structure for communication (buffer) with the FB_KL6831KL6841Communication() block.

Examples

The following tables show the results of the function block with different initial situations. In all cases two SMI devices are connected to an SMI terminal and both addresses are greater than 0.

The slave ID () sought lies between the slave IDs of the two drives: dwSlaveId

Outputs

Meaning

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdLTSearchId

At least one motor has the slave address equal 0 and the slave ID is smaller than the slave ID sought.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdGTSearchId

At least one motor has the slave address equal 0 and the slave ID is greater than the slave ID sought.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdETSearchId

No motor has the slave address equal 0 and the slave ID is the same as the slave ID sought.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

No motor has the slave address unequal 0.

The slave ID () sought is greater than the slave IDs of the two drives: dwSlaveId

Outputs

Meaning

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdLTSearchId

At least one motor has the slave address equal 0 and the slave ID is smaller than the slave ID sought.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdGTSearchId

No motor has the slave address equal 0 and the slave ID is greater than the slave ID sought.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdLTSearchId

No motor has the slave address equal 0 and the slave ID is smaller than the slave ID sought.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

No motor has the slave address unequal 0.

The slave ID () sought is smaller than the slave IDs of the two drives: dwSlaveId

Outputs

Meaning

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdLTSearchId

No motor has the slave address equal 0 and the slave ID is smaller than the slave ID sought.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdGTSearchId

At least one motor has the slave address equal 0 and the slave ID is greater than the slave ID sought.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdETSearchId

No motor has the slave address equal 0 and the slave ID is the same as the slave ID sought.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

No motor has the slave address unequal 0.

The slave ID () sought is the same as the slave ID of a drive: dwSlaveId

Outputs

Meaning

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdLTSearchId

No motor has the slave address equal 0 and the slave ID is smaller than the slave ID sought.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdGTSearchId

At least one motor has the slave address equal 0 and the slave ID is greater than the slave ID sought.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdETSearchId

At least one motor has the slave address equal 0 and the slave ID is the same as the slave ID sought.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

No motor has the slave address unequal 0.

Requirements

Development environment

Target system

Required libraries

TwinCAT 2.11 R3/x64 from build 2238

PC/CX, BX or BC

TcSMI library from V1.0.0