SET_VIRTUAL_LEVEL
vining
Posts: 4,368
I created a virtual device array of virtuals with the same device number and different ports:
I then needed 48 levels for each virtual so in the online event for vdvTP_DCMArry I put:
unfortunately unless I'm missing something only virtual port 1 will generate an online event and trigger the set_virtual_level function. This had me going nuts for a good hour until I started watching diagnostics with the debug send strings in place.
So I decided to run a loop in define start:
I guess I could also do this since every one says set_level/channel counts should be in an online event:
Any thoughts or alternatives other than not using mutliple port virtuals? Should I be using Rebuild_Event in the code where I have them? Obviously I'm thinking I should since they do affect the event tables but do I?
vdvTP_DCM_1 = 33021:1:1 ; vdvTP_DCM_2 = 33021:2:1 ; VOLATILE DEV vdvTP_DCMArry[DCM_NUM_DCMs]= {vdvTP_DCM_1,vdvTP_DCM_2} ;Then in define start:
SET_VIRTUAL_PORT_COUNT(vdvTP_DCMArry[1],DCM_NUM_vdTP_DCMs) ;to allow multiple ports on a virtual device number.
I then needed 48 levels for each virtual so in the online event for vdvTP_DCMArry I put:
DATA_EVENT[dvDCM_TPArry] { ONLINE:// { STACK_VAR INTEGER nTPIndx ; nTPIndx = GET_LAST(dvDCM_TPArry) ; SET_VIRTUAL_LEVEL_COUNT(dvDCM_TPArry[nTPIndx],DCM_NUM_STRUCT_n_LVLs) ;// fnDCM_DeBug("fnDEV_TO_STRING(dvDCM_TPArry[nTPIndx]),', ONLINE! >-Line-<',ITOA(__LINE__),'>',CRLF") ; }
unfortunately unless I'm missing something only virtual port 1 will generate an online event and trigger the set_virtual_level function. This had me going nuts for a good hour until I started watching diagnostics with the debug send strings in place.
So I decided to run a loop in define start:
DEFINE_START //SET VIRTUAL PORT COUNTS & LEVEL COUNTS { STACK_VAR INTEGER i ; nDCM_DeBug = 1 ; #WARN 'debug set to 1 line 910 DefineStart' ; SET_VIRTUAL_PORT_COUNT(vdvTP_DCMArry[1],DCM_NUM_vdTP_DCMs) ; REBUILD_EVENT() ; fnDCM_DeBug("fnDEV_TO_STRING(vdvTP_DCMArry[1]),', SET PORT COUNT-',itoa(DCM_NUM_vdTP_DCMs),'! >-Line-<',ITOA(__LINE__),'>',CRLF") ; for(i = 1 ; i <= DCM_NUM_vdTP_DCMs ; i ++) { SET_VIRTUAL_LEVEL_COUNT(vdvTP_DCMArry[i],DCM_NUM_STRUCT_n_LVLs) ; REBUILD_EVENT() ; fnDCM_DeBug("fnDEV_TO_STRING(vdvTP_DCMArry[i]),', SET LEVEL COUNT TO ',ITOA(DCM_NUM_STRUCT_n_LVLs),'. >-Line-<',ITOA(__LINE__),'>',CRLF") ; fnDCM_DeBug("fnDEV_TO_STRING(vdvTP_DCMArry[i]),', REBUILT EVENT. >-Line-<',ITOA(__LINE__),'>',CRLF") ; } }
I guess I could also do this since every one says set_level/channel counts should be in an online event:
DATA_EVENT[dvDCM_TPArry] { ONLINE://Main TP Online_Event defaults to Main Page { STACK_VAR INTEGER nTPIndx ; nTPIndx = GET_LAST(dvDCM_TPArry) ; if(nTPIndx == 1) { for(i = 1 ; i <= DCM_NUM_vdTP_DCMs ; i ++) { SET_VIRTUAL_LEVEL_COUNT(vdvTP_DCMArry[i],DCM_NUM_STRUCT_n_LVLs) ; REBUILD_EVENT() ; fnDCM_DeBug("fnDEV_TO_STRING(vdvTP_DCMArry[i]),', SET LEVEL COUNT TO ',ITOA(DCM_NUM_STRUCT_n_LVLs),'. >-Line-<',ITOA(__LINE__),'>',CRLF") ; fnDCM_DeBug("fnDEV_TO_STRING(vdvTP_DCMArry[i]),', REBUILT EVENT. >-Line-<',ITOA(__LINE__),'>',CRLF") ; } } fnDCM_DeBug("fnDEV_TO_STRING(dvDCM_TPArry[nTPIndx]),', ONLINE! >-Line-<',ITOA(__LINE__),'>',CRLF") ; }
Any thoughts or alternatives other than not using mutliple port virtuals? Should I be using Rebuild_Event in the code where I have them? Obviously I'm thinking I should since they do affect the event tables but do I?
0