1. No "reusable code" in SLC500.
SLC500 doesnt have the reusable code system that S5/S7 have.
The closest thing is that you can pass some words back and forth when calling a subroutine. But you will have a tough time if you want to port S7 FBs with instance DBs to SLC500.
SLC500 is really a "classical" way of doing PLC programs.
2. SLC500 is ladder diagrams only.
If you can switch your S5/S7 code to LAD, then you are in luck.
SLC500 ladder code is very similar.
On the other hand, if you have a lot of S5/S7 STL code, it will be tough going.
3. S5 timers and the S5Timers in S7 are very different from the timers in SLC500. In S5/S7 the timer counts down to zero, in SLC500 the timers counts up from zero. The setpoint and the actual value is two separate adresses (ex: T4:0.pre and T4:0.acc). You investigate if a timer is TRUE with the "done" bit (ex: T4:0.dn).
4. VERY IMPORTANT TIP #1:
Examine the "math overflow" bit (S:5/0) at the end of the program scan, and if set make an alarm on the HMI, AND then reset the bit. If not the PLC will fault. (All newcomers to SLC500 will sooner or later experience that the CPU faults for this reason. And if you are not prepared for it, it will happen at the worst time).
5. VERY IMPORTANT TIP #2:
If you use an EPROM (recommended), then set the bit "Load memory module on memory error" (S:1/10). Store the program to the memory module with the bit set, otherwise the CPU will fault.
6. There is no error program file system like the OBs in S5/S7. You must investigate the error bits in the status file if you need such functionality.
7. Learn the SLC500 instruction mnemonics (ex. XIC for a N.O. contact). Editing the instructions with the keyboard is much faster than using the mouse.
thats what I could come up with off the top of my head