Arduino Create and send data to Serial Port (Software Serial function)
CreateMessage is a misnomer. The message it creates vanishes as soon as the function returns. Its real purpose it to send a message. So call it appropriately.
Too many comments duplicating the functionality. For example, any time you feel you need a comment as in

digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit


it means that you really need a function

void enableRS485Transmit(....) {
    digitalWrite(SSerialTxControl, RS485Transmit);
}

The inner loop of CRC computation can be simplified. Notice that no matter what, the first thing you do is crc16 &gt;&gt;= 1. Factor it out:

    for (i = 8; i != 0; i--) {
        crc16 &gt;&gt;= 1;
        if (crc16 &amp; 0x0001) {
            crc16 ^= 0xA001;
        }
    }


Granted, the compiler will likely notice that. Still it is good for the reviewers and maintainers.
The function takes 24 bytes of stack space. Seems like a bit too much. Granted, the compiler would likely optimize out most of it. Still, consider

    enum { Slave, Function, AddHi, AddLo, DataHi, DataLo, CrcHi, CrcLo, MsgSize};
    byte message[MsgSize] = {1, 6, Address&gt;&gt;8, Address, Data&gt;&gt;8, Data};
    unsigned int crc = CRC(message, CrcHi);
    message[CrcHi] = crc;
    message[CrcLo] = crc &gt;&gt; 8;

If your compiler has &lt;stdint.h&gt;, I strongly recommend using an explicit uint16_t rather then unsigned int (of unspecified bit width).