It depends on what you want to send. If the receiver expects a floating point variable, then it still doesn't work.
A floating point variable is stored according to the IEEE 754 standard which you can transfer as 4 bytes, but not by the REAL_TO_WORD conversion.
What you need to send is the "real binairy value" of the REAL.
This can be done with a trick to add a "Union" Data Unit Type (DUT) to the application. A Union shares the memory for different variables:
TYPE unionDwReal :
dwDword : DWORD;
rReal : REAL;
When you declare this in your application as variable you can write your real to the real variable of the union, but then send the DWORD with the SDO. This off course only works correctly if the receiver also expects to receive a floating point variable according to the IEEE 754 standard (which almost all do).
uDwR : unionDwReal;
dwSDO : DWORD;
uDwR.rReal := 23.1234;
dwSDO := uDwR.dwDword;
PS, another similar method is by using pointers. This would be the way to do it with V2.3.