Because Siemens likes providing OPTIONS, there are actually 4 different types of edge detection instructions. I'm speaking in terms of positive edge detection, but everything is repeated for negative/falling edge detection.
--|P|-- is a contact that reads the top tag, stores it in the bottom tag, and evaluates TRUE for one scan on the rising edge.
--(P)-- is a coil that reads the rung status (RLO in Siemens speak), stores it in the bottom tag, and sets the top tag as true for one scan on a rising edge. It does not affect the RLO of the rung, so if you put a coil after it, the coil will be true based on the preceding logic, unaffected by the edge detection.
The P_Trig instruction reads the RLO, stores it in the bottom tag, and the q output evaluates as true for one scan. This affects the RLO, which means you can use it to directly feed your SET instruction.
The R_Trig instruction is an FB, which means that it creates an instance DB (or can be multi-instanced into another FB) instead of being fed a single bit. It basically works the same as the --(P)-- coil, but it stops evaluating if you disable the block at the EN input.
Personally, I rarely use R_Trig or --(P)--, I mostly stick with P_Trig and --|P|--. Mostly personal preference, but the R_Trig instruction takes a lot more screen space.