Home AMX User Forum NetLinx Modules & Duet Modules

Duet Module Warming State didn't goes Off

Hi all,

i'm currently working on a project and i'm having a strange issue.

I'm currently using channel_event[vdvDisplay,Warming] to know when the warming state switch from ON/OFF. at the same time i have enable counternofity-1 to know when warming-xx reach 0 and the warming state stay active. I didn't have this issue with the cooling state. any one have a clue for me.

Here's the part of the Data_event for my virtual device
    COMMAND:
    {
	// local variables
        STACK_VAR CHAR    cCmd[DUET_MAX_CMD_LEN]
        STACK_VAR CHAR    cHeader[DUET_MAX_HDR_LEN]
        STACK_VAR CHAR    cParameter[DUET_MAX_PARAM_LEN]
        STACK_VAR INTEGER nParameter
        //STACK_VAR CHAR    cTrash[20]
	
	cCmd = DATA.TEXT
	send_string 0,data.text
	cHeader = DuetParseCmdHeader(cCmd)
	switch(cHeader)
	{
	    CASE 'COOLDOWN':
	    {
		TDisplay.ncoolingtime = atoi(DuetParseCmdParam(cCmd))
		//fnSendCommand(dvTPMain,"'^BMF-1,0,%GH',itoa(TDisplay.ncoolingtime),'%GL0'") // Set level range of TP
	    }
	    CASE 'WARMUP':
	    {
		TDisplay.nwarmingtime = atoi(DuetParseCmdParam(cCmd))
		//fnSendCommand(dvTPMain,"'^BMF-2,0,%GH',itoa(TDisplay.nwarmingtime),'%GL0'") // Set Level range of TP
	    }
	    CASE 'COOLING':
	    {
		nParameter = atoi(DuetParseCmdParam(cCmd))
		if(nParameter=False) TDisplay.ncooling=false else TDisplay.ncooling=true
		TDisplay.nwaitingtimer = nParameter*255/TDisplay.ncoolingtime
		fnSendLevel(dvTPMain,display_waitlvl,TDisplay.nwaitingtimer)
	    }
	    CASE 'WARMING':
	    {
		nParameter = atoi(DuetParseCmdParam(cCmd))
		if(nParameter=False)
		{
		    TDisplay.nwarming=false
		    //fnSendCommand(vdvDisplay,'INPUTSELECT-6')
		}
		else 
		{
		    TDisplay.nwarming=true
		}
		TDisplay.nwaitingtimer = nParameter*255/TDisplay.nwarmingtime
		fnSendLevel(dvTPMain,display_waitlvl,TDisplay.nwaitingtimer)
	    }
	    CASE 'INPUTSELECT':
	    {
		nParameter = atoi(DuetParseCmdParam(cCmd))
		TDisplay.ninput = nParameter
	    }
	}
    }
}

Here's the part of the channel event
channel_event[vdvDisplay,display_cooling] // Display Cooling
{
    on:
    {
	//TDisplay.ncooling=true
	fnSendString(0,'Display Cooling')
    }
    off:
    {
	//TDisplay.ncooling=false
	fnSendString(0,'Display Cooling Complete')
    }
}

channel_event[vdvDisplay,display_warming] // Display Warming
{
    on:
    {
	//TDisplay.nwarming=true
	fnSendString(0,'Display Warming')
    }
    off:
    {
	//Tdisplay.nwarming=false
	//send_command vdvDisplay,'INPUTSELECT-6'
	fnSendString(0,'Display Warming Complete')

    }
}

i have commented some line during my test to understand why it doesn't work.

Thanks folk for your help.

Comments

  • When connected to the system, please telnet in and issue a
    device status <display's duet virtual dev number>:1
    

    What do you get back in terms of the feedback channels? Is 253 (SNAPI warming) going OFF or staying on? If telnet shows that it is going OFF, then it is netlinx code related. If it never goes off, then it is pointing towards a module problem.

    To test your code, can you emulate the channel event through studio? If so, does that fire your send_string 0?
  • RaphayoRaphayo Posts: 111
    What do you mean by telnet?

    can I telnet the processor yo get the state of a vdevice?

    I was only using emulate/control in studio


    to troubleshoot.

    if I reinit the module when the warming countdown is complete, everything goes fine.

    right now I'm using the duet module of an NEC np600 projector because it's the device I have with me.
  • Yes, you can telnet into the Netlinx Controller and query it for status of a device. This will tell you a number of bits of info. Here is a sample from a touchpanel on my desk:
    Welcome to NetLinx v4.1.373 Copyright AMX LLC 2012
    >device status 10005:1
    Device Status
    -------------
    Device 10005 AMX LLC,MXT-700i,v2.104.54 contains 3 Ports.
     Port     1 - Channels:255 Levels:8
                  MaxStringLen=1024 Types=8 bit  MaxCommandLen=1024 Types=8 bit
                  The following input channels are on:None
                  The following output channels are on:None
                  The following feedback channels are on:None
                  Level 1=0 Supported data types=UByte,UInt
                  Level 2=0 Supported data types=UByte,UInt
                  Level 3=0 Supported data types=UByte,UInt
                  Level 4=0 Supported data types=UByte,UInt
                  Level 5=0 Supported data types=UByte,UInt
                  Level 6=0 Supported data types=UByte,UInt
                  Level 7=0 Supported data types=UByte,UInt
                  Level 8=0 Supported data types=UByte,UInt
    
  • RaphayoRaphayo Posts: 111
    great I will try that.

    can i do the same thing with the web application in the processor under diagnostics ?
  • RaphayoRaphayo Posts: 111
    i have create a basic program with only the vdevice and I have the same issue when warming up
    PROGRAM_NAME='test'
    (***********************************************************)
    (***********************************************************)
    (*  FILE_LAST_MODIFIED_ON: 04/05/2006  AT: 09:00:25        *)
    (***********************************************************)
    (* System Type : NetLinx                                   *)
    (***********************************************************)
    (* REV HISTORY:                                            *)
    (***********************************************************)
    (*
        $History: $
    *)
    include 'SNAPI.axi'
    
    (***********************************************************)
    (*          DEVICE NUMBER DEFINITIONS GO BELOW             *)
    (***********************************************************)
    DEFINE_DEVICE
    dvCom1		= 5001:1:0	// ComPort A
    
    
    (*** Virtual Device Duet Module ***)
    vdvDisplay	= 41001:1:0
    
    (***********************************************************)
    (*               CONSTANT DEFINITIONS GO BELOW             *)
    (***********************************************************)
    DEFINE_CONSTANT
    
    TRUE		= 1
    FALSE		= 0
    
    DISPLAY_WARMING	= 253
    DISPLAY_COOLING	= 254
    DISPLAY_POWER	= 255
    DISPLAY_ONLINE	= 251
    DISPLAY_READY	= 252 // Initialized
    DISPLAY_ON	= 27
    DISPLAY_OFF	= 28
    DISPLAY_HDMI	= 6 //InputSelect Value
    
    (***********************************************************)
    (*              DATA TYPE DEFINITIONS GO BELOW             *)
    (***********************************************************)
    DEFINE_TYPE
    
    structure _DeviceState // Device State variable
    {
        integer ninitialize // Initialize State
        integer nonline // Online State
        integer npower // Power State
        integer nwarming // Warming State
        integer ncooling // Cooling State
        integer nwarmingtime // Warming Time Value
        integer ncoolingtime // Cooling time Value
        integer nwaitingtimer // Timer value during warming || cooling state
        integer nready // Ready to operate state
        integer nInput // Actual Input Selected
        integer nInputreq // Requested Input
    }
    
    (***********************************************************)
    (*               VARIABLE DEFINITIONS GO BELOW             *)
    (***********************************************************)
    DEFINE_VARIABLE
    
    _DeviceState TDisplay // Display Device State
    
    (***********************************************************)
    (*               LATCHING DEFINITIONS GO BELOW             *)
    (***********************************************************)
    DEFINE_LATCHING
    
    (***********************************************************)
    (*       MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW           *)
    (***********************************************************)
    DEFINE_MUTUALLY_EXCLUSIVE
    
    (***********************************************************)
    (*        SUBROUTINE/FUNCTION DEFINITIONS GO BELOW         *)
    (***********************************************************)
    Define_Function fnSendString(Dev Device, Char Cmd[]) // Send String to a Device
    {
        Send_String Device, Cmd;
    }
    
    (***********************************************************)
    (*                STARTUP CODE GOES BELOW                  *)
    (***********************************************************)
    DEFINE_START
    DEFINE_MODULE 'NEC_NP610_Comm_dr1_0_0' comm1(vdvDisplay, dvCom1)
    
    (***********************************************************)
    (*                THE EVENTS GO BELOW                      *)
    (***********************************************************)
    DEFINE_EVENT
    DATA_EVENT[vdvDisplay]
    {
        ONLINE:
        {
    	SEND_COMMAND vdvDisplay,'Baud_Rate,19200'
    	SEND_COMMAND vdvDisplay,'PROPERTY-Poll_Time,5000'
    	SEND_COMMAND vdvDisplay,'REINIT'
    	SEND_COMMAND vdvDisplay,'COUNTERNOTIFY-1'
    	SEND_COMMAND vdvDisplay,'?COOLDOWN'
    	SEND_COMMAND vdvDisplay,'?WARMUP'
        }
        STRING:
        {
    	send_string 0,"vdvDisplay.NUMBER,' String: ',data.text"
        }
        COMMAND:
        {
    	// local variables
            STACK_VAR CHAR    cCmd[DUET_MAX_CMD_LEN]
            STACK_VAR CHAR    cHeader[DUET_MAX_HDR_LEN]
            STACK_VAR CHAR    cParameter[DUET_MAX_PARAM_LEN]
            STACK_VAR INTEGER nParameter
            //STACK_VAR CHAR    cTrash[20]
    	
    	cCmd = DATA.TEXT
    	send_string 0,data.text
    	cHeader = DuetParseCmdHeader(cCmd)
    	switch(cHeader)
    	{
    	    CASE 'COOLDOWN':
    	    {
    		TDisplay.ncoolingtime = atoi(DuetParseCmdParam(cCmd))
    		//fnSendCommand(dvTPMain,"'^BMF-1,0,%GH',itoa(TDisplay.ncoolingtime),'%GL0'") // Set level range of TP
    	    }
    	    CASE 'WARMUP':
    	    {
    		TDisplay.nwarmingtime = atoi(DuetParseCmdParam(cCmd))
    		//fnSendCommand(dvTPMain,"'^BMF-2,0,%GH',itoa(TDisplay.nwarmingtime),'%GL0'") // Set Level range of TP
    	    }
    	    CASE 'COOLING':
    	    {
    		nParameter = atoi(DuetParseCmdParam(cCmd))
    		//if(nParameter=False) TDisplay.ncooling=false else TDisplay.ncooling=true
    		TDisplay.nwaitingtimer = nParameter//*255/TDisplay.ncoolingtime
    		//fnSendLevel(dvTPMain,display_waitlvl,TDisplay.nwaitingtimer)
    	    }
    	    CASE 'WARMING':
    	    {
    		nParameter = atoi(DuetParseCmdParam(cCmd))
    		TDisplay.nwaitingtimer = nParameter//*255/TDisplay.nwarmingtime
    		//fnSendLevel(dvTPMain,display_waitlvl,TDisplay.nwaitingtimer)
    	    }
    	    CASE 'INPUTSELECT':
    	    {
    		nParameter = atoi(DuetParseCmdParam(cCmd))
    		TDisplay.ninput = nParameter
    	    }
    	}
        }
    }
    channel_event[vdvDisplay,display_cooling] // Display Cooling
    {
        on:
        {
    	TDisplay.ncooling=true
    	fnSendString(0,'Display Cooling')
        }
        off:
        {
    	TDisplay.ncooling=false
    	fnSendString(0,'Display Cooling Complete')
        }
    }
    
    channel_event[vdvDisplay,display_warming] // Display Warming
    {
        on:
        {
    	TDisplay.nwarming=true
    	fnSendString(0,'Display Warming')
        }
        off:
        {
    	Tdisplay.nwarming=false
    	//send_command vdvDisplay,'INPUTSELECT-6'
    	fnSendString(0,'Display Warming Complete')
    
        }
    }
    
    channel_event[vdvDisplay,display_ready] // display Initialized State
    {
        on:
        {
    	TDisplay.ninitialize=true
        }
        off:
        {
    	TDisplay.ninitialize=false
        }
    }
    channel_event[vdvDisplay,display_online] // display Online State
    {
        on:
        {
    	TDisplay.nonline=true
        }
        off:
        {
    	TDisplay.nonline=false
        }  
    }
    
    channel_event[vdvDisplay,display_power] // Display Power State
    
    {
        on:
        {
    	TDisplay.npower=true
        }
        off:
        {
    	TDisplay.npower=false
        }  
    }
    
    
    (***********************************************************)
    (*            THE ACTUAL PROGRAM GOES BELOW                *)
    (***********************************************************)
    DEFINE_PROGRAM
    
    (***********************************************************)
    (*                     END OF PROGRAM                      *)
    (*        DO NOT PUT ANY CODE BELOW THIS COMMENT           *)
    (***********************************************************)
    


    i copy what i have monitor with mange system web browser
    <![CDATA[09/24/2014 14:16:06.083 FEEDBACK OFF[41001:1:1,252]]]>
    <![CDATA[09/24/2014 14:16:06.084 OFF[41001:1:1,252]]]>
    <![CDATA[09/24/2014 14:16:06.094 FEEDBACK OFF[41001:1:1,251]]]>
    <![CDATA[09/24/2014 14:16:06.094 OFF[41001:1:1,251]]]>
    <![CDATA[09/24/2014 14:16:06.428 FEEDBACK ON[41001:1:1,251]]]>
    <![CDATA[09/24/2014 14:16:06.428 ON[41001:1:1,251]]]>
    <![CDATA[09/24/2014 14:16:06.429 FEEDBACK ON[41001:1:1,252]]]>
    <![CDATA[09/24/2014 14:16:06.429 ON[41001:1:1,252]]]>
    <![CDATA[09/24/2014 14:16:06.474 FEEDBACK OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:16:06.474 OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:16:06.476 FEEDBACK OFF[41001:1:1,253]]]>
    <![CDATA[09/24/2014 14:16:06.476 OFF[41001:1:1,253]]]>
    <![CDATA[09/24/2014 14:16:06.674 FEEDBACK ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:16:06.674 ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:16:27.418 FEEDBACK ON[41001:1:1,254]]]>
    <![CDATA[09/24/2014 14:16:27.418 ON[41001:1:1,254]]]>
    <![CDATA[09/24/2014 14:17:58.071 FEEDBACK OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:17:58.071 OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:17:58.072 FEEDBACK OFF[41001:1:1,254]]]>
    <![CDATA[09/24/2014 14:17:58.072 OFF[41001:1:1,254]]]>
    <![CDATA[09/24/2014 14:22:12.722 FEEDBACK ON[41001:1:1,253]]]>
    <![CDATA[09/24/2014 14:22:12.722 ON[41001:1:1,253]]]>
    <![CDATA[09/24/2014 14:22:12.723 FEEDBACK ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 14:22:12.723 ON[41001:1:1,255]]]>
    
  • RaphayoRaphayo Posts: 111
    Here's the last Diagnostics, you could see at 15:11:20.939 i have to sent reinit to be able to reuse the module. sometime the warming is operating correctly. i'm using NEC_NP610_Comm_dr1_0_0.jar is there a chance there's something wrong with this module?
    <![CDATA[09/24/2014 15:05:01.058 FEEDBACK ON[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:05:01.058 ON[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:05:01.059 FEEDBACK ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:05:01.059 ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:06:32.920 FEEDBACK OFF[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:06:32.920 OFF[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:07:28.609 FEEDBACK ON[41001:1:1,254]]]>
    <![CDATA[09/24/2014 15:07:28.609 ON[41001:1:1,254]]]>
    <![CDATA[09/24/2014 15:09:00.423 FEEDBACK OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:09:00.423 OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:09:00.423 FEEDBACK OFF[41001:1:1,254]]]>
    <![CDATA[09/24/2014 15:09:00.423 OFF[41001:1:1,254]]]>
    <![CDATA[09/24/2014 15:09:15.104 FEEDBACK ON[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:09:15.105 ON[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:09:15.105 FEEDBACK ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:09:15.105 ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:11:20.939 SEND COMMAND[41001:1:1] Type=CHAR Length=6 'REINIT']]>
    <![CDATA[09/24/2014 15:11:20.948 FEEDBACK OFF[41001:1:1,252]]]>
    <![CDATA[09/24/2014 15:11:20.948 OFF[41001:1:1,252]]]>
    <![CDATA[09/24/2014 15:11:20.960 FEEDBACK OFF[41001:1:1,251]]]>
    <![CDATA[09/24/2014 15:11:20.960 OFF[41001:1:1,251]]]>
    <![CDATA[09/24/2014 15:11:21.293 FEEDBACK ON[41001:1:1,251]]]>
    <![CDATA[09/24/2014 15:11:21.294 ON[41001:1:1,251]]]>
    <![CDATA[09/24/2014 15:11:21.295 FEEDBACK ON[41001:1:1,252]]]>
    <![CDATA[09/24/2014 15:11:21.295 ON[41001:1:1,252]]]>
    <![CDATA[09/24/2014 15:11:21.343 FEEDBACK OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:11:21.343 OFF[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:11:21.345 FEEDBACK OFF[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:11:21.345 OFF[41001:1:1,253]]]>
    <![CDATA[09/24/2014 15:11:21.540 FEEDBACK ON[41001:1:1,255]]]>
    <![CDATA[09/24/2014 15:11:21.540 ON[41001:1:1,255]]]>
    
  • Is the display a NP610, or is it a close match that seems to work?
  • RaphayoRaphayo Posts: 111
    it's np510 who is the same series has the np610
  • Thank you for clarifying. My suggestion would be to open a technical support ticket at this point. In the past, we would receive one physical model in a "family" and write/test against that. Occasionally, there are quirks about individual models that are not visible in the protocol document, and because the physical device wasn't sent in, we are unaware of the issue. Moving forward, most display manufacturers are now creating their own AMX drivers and we no longer allow a driver for a "family" -- it is one driver per model. This allows us to easily target variations that occur in models. This module was created in 2010 and did not benefit from the current methods.

    My guess is that given the mixed results you are receiving, it could be a problem with the module not understanding the response from the device. If you telnet into the processor again, you can do the following to try and further diagnose the issue on your own:
    msg on
    send c <duet virtual dev number>, 'DEBUG-4'
    

    and observe the parsing of responses and how/if/why it is breaking down.
  • RaphayoRaphayo Posts: 111
    I have done few test and increase the warming delay time to 120 and the module work perfectly. but if i bring it to 90 sec. It's looking to be goin into a loop somewhere waiting for a response who is never asked again.

    if i passthru the command send after the countdown is complete the projector response me and the warming state going away.
  • Raphayo wrote: »
    I have done few test and increase the warming delay time to 120 and the module work perfectly. but if i bring it to 90 sec. It's looking to be goin into a loop somewhere waiting for a response who is never asked again.

    if i passthru the command send after the countdown is complete the projector response me and the warming state going away.

    Good AM Raphael,

    Try using 91; it is probably a logic error...
    90 is the min value.

    Let me know if this works.
  • RaphayoRaphayo Posts: 111
    no success. i was hoping the module retrig the command send after the warming process ended but it look is not.
  • I'll bet the module is not querying the device and is simply using a wait or timeline to trigger the Warm/Cool State.

    Control is IP or RS232?

    If RS232 monitor the strings to and from the projector to see if it is actually using feedback.

    If IP, use WireShark...

    If they are faking the feedback; it could still be a logic issue.

    Doesn't help if it is a logic module, but you could create your on Fake feedback to handle this.

    Or create your own module... a bit of work.
  • RaphayoRaphayo Posts: 111
    i find by sending
    Send_Command vdvDevice,"'PASSTHRU-',$00,$85,$00,$00,$01,$01,$87"
    
    i take control back of the module.

    i would probably using that alternative with a timeline after the countdown is finnish and kill this timeline when the warming state will goes low.

    the magic of writing code
  • Yep, sometimes there are too many workarounds for code that we cannot modify.

    Are you doing a lot of AMX in Montreal?
    It seems most of the new jobs in Calgary are Cre$tron.
    Shell is moving everything to Cre$tron over the next 2 years.

    I have to go back out to TO in Oct/Nov to do Cre$tron P201.
  • RaphayoRaphayo Posts: 111
    I'm doing somme we pushed both of control system. i recently complète my AMX certification but I'm still learning and develop my skill.
  • I still do not have certification.
    Completed PII, and submitted the Project for "marking" and have not heard back...

    Did you do PIII?
  • RaphayoRaphayo Posts: 111
    no I have completed the practical exam for PII, If I'm correct there no more P3
Sign In or Register to comment.