I don't quite understand what you are trying to achieve. How many potential alarm events are you keeping track?
Lets assume you have 10 alarm events and you keep them in DM[1] to DM[10] like you said, and using the numerical value to represent what the text should be displayed for each value. A value = 0 means the alarm event is cleared.
So you can run a periodic scan (e.g. every second) of these 10 DMs and refresh the display of only those event that are active:
SETLCD 1,1, CHR$(1) ' Clear Screen
N = 1 ' starting line
FOR I = 1 to 10
IF DM <> 0 ' an active event.
SETLCD N,1, STR$(I,2)+":"
IF DM = 10
SETLCD N,4, "Alarm"
ELSE
IF DM = 11
SETLCD N,4, "Trip"
ELSE
IF DM = 12
SETLCD N,4, "Error"
ENDIF
ENDIF
ENDIF
N = N+1
IF N > 4 ' no more lines for displaying alarm'
RETURN
ENDIF
ENDIF
NEXT
The LCD display will display the first four active alarms it found using the example format
01:Alarm
03:Trip
07:Error
08:Trip
So your list will display the event number 01 to 10 and the error type.
However, since the LCD only has 4 lines the maximum number of alarm you can display at any one time is 4 if you use one line per alarm event. So the FOR NEXT loop will quit when 4 lines has already been displayed. You therefore should put higher priority event on the first few DM[]s so that the high priority event will be displayed first if more than 4 alarms occurred simultaneously.