This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Delta DVP
#1
Hi! 
I don't have any experience with Lm. But there is a device on the Modbus to link LM. Please help in creating a profile for the survey of inputs, outputs, and data registers. Map Delta DVP registers and Protocol description for them I've attached.
Thanks in advance for your help in the study of Lm.
   
.doc   DVP_ communication Protocol.doc (Size: 388.5 KB / Downloads: 7)
Reply
#2
Does it support Modbus RTU? Have you tried communicating with it using RTU read test? From the supplied documentation it seems that PLC uses Modbus ASCII which is not supported by the Modbus mapper.
Reply
#3
Hi,

Delta has there own protocol to a IP gateway, this gateway uploads data to the Delta Cloud Service and there is no API.

What i have done before is reading the Delta gateway's HTTP pages to get the data from it.

It's written for our HVAC SmartStruxure Lite controller, also LUA but it should be easy to port to the LM controller format.

Code:
-- ******** Delta Solivia GW -> MPM module version 1.0 created by Erwin van der Zwart ******** 2015-12-10 ******** --
 
if not init then
 -- Import libraries
 require ("http")
 
 -- Set timout for max wait time on HTTP response
 http.TIMEOUT = 15
 
 -- Delta Solivia GW Settings
 IP_Address = '192.168.10.207'
 UserName = 'admin'
 PassWord = 'Schneider'
 
 -- MPM objects
 var("Absolute_Maximum_In_We_Object", "ME.AV44")
 var("Percentage_Of_Nominal_Power_Object", "ME.AV45")
 
 -- End init
 init = true
else

    -- Login before requesting data
    if not login then  
      response = http.request('http://' .. IP_Address .. '/LoginCgi?ed_user=' .. UserName .. '&pw1=' .. PassWord .. '&logIn=Log+in')
      -- Check if Response = successfully completed
      for i in string.gmatch(response, '<body><br><h2 align="left"><font color="#339900">.-</font>') do
        if i ~= nil then
          responsestring =  i:match([[color="#339900">(.-)</]])
          --print(responsestring)
        end
      end
      if responsestring == 'Operation successfully completed!' then
        print('Login procedure ready, getting values..')
        login = true
      end
    else
      -- Get data from webservice
      local data = http.request('http://' .. IP_Address .. '/Unbalanced.htm')
      
      --print(data)
      
      -- Check if data is received
      if not data then
        print('No data found.. , restarting procedure to try again..')
        login = nil
        return
      end
      
      -- Check if login is handled correct
      for i in string.gmatch(data, '<h2>.-</h2>') do
        if i ~= nil then
          login_asked = i:match([[<h2>(.-)</h2>]])
          if login_asked == 'Please log in' then
            print('Login not ready or logged out, system will try to login again..')
            login = nil
            return
          end
        end
      end
      
      -- Power Balancing
      for i in string.gmatch(data, '<input type="text".-</p>') do
        if i ~= nil then
          --print(i)
          
          absolute_maximum_in_We = i:match([[name="t1" value="(.-)"]])
          if absolute_maximum_in_We then
           Absolute_Maximum_In_We_Object = absolute_maximum_in_We
            print('Absolute maximum in We = ' .. absolute_maximum_in_We)
          end
          
          percentage_of_nominal_power = i:match([[name="t2" value="(.-)"]])
          if percentage_of_nominal_power then
           Percentage_Of_Nominal_Power_Object = percentage_of_nominal_power
            print('Percentage of nominal power = ' .. percentage_of_nominal_power)
          end
        end
      end

      -- Add extra data pagefields here...
 end --End Login
end -- End init

BR,

Erwin
Reply
#4
(24.08.2017, 17:42)admin Wrote: Does it support Modbus RTU? Have you tried communicating with it using RTU read test? From the supplied documentation it seems that PLC uses Modbus ASCII which is not supported by the Modbus mapper.

Yes, Modbus rtu is supported. He included me in the PLC. Test to read from register LM is successful. I have difficulties to describe the profile line to read for example the register D0 at the address 4096.
With this option the register is not read. Don't understand what the problem is.

 { "name": "Input 1", "bus_datatype": "float16", "type": "inputregister", "address": 4096, "value_multiplier": 0.001, "units": "V" },

    { "name": "Input 2", "bus_datatype": "float16", "type": "inputregister", "address": 4096, "value_multiplier": 0.001, "units": "V" },

(24.08.2017, 21:43)Erwin van der Zwart Wrote: Hi,

Delta has there own protocol to a IP gateway, this gateway uploads data to the Delta Cloud Service and there is no API.

What i have done before is reading the Delta gateway's HTTP pages to get the data from it.

It's written for our HVAC SmartStruxure Lite controller, also LUA but it should be easy to port to the LM controller format.

Code:
-- ******** Delta Solivia GW -> MPM module version 1.0 created by Erwin van der Zwart ******** 2015-12-10 ******** --
 
if not init then
 -- Import libraries
 require ("http")
 
 -- Set timout for max wait time on HTTP response
 http.TIMEOUT = 15
 
 -- Delta Solivia GW Settings
 IP_Address = '192.168.10.207'
 UserName = 'admin'
 PassWord = 'Schneider'
 
 -- MPM objects
 var("Absolute_Maximum_In_We_Object", "ME.AV44")
 var("Percentage_Of_Nominal_Power_Object", "ME.AV45")
 
 -- End init
 init = true
else

    -- Login before requesting data
    if not login then  
      response = http.request('http://' .. IP_Address .. '/LoginCgi?ed_user=' .. UserName .. '&pw1=' .. PassWord .. '&logIn=Log+in')
      -- Check if Response = successfully completed
      for i in string.gmatch(response, '<body><br><h2 align="left"><font color="#339900">.-</font>') do
        if i ~= nil then
          responsestring =  i:match([[color="#339900">(.-)</]])
          --print(responsestring)
        end
      end
      if responsestring == 'Operation successfully completed!' then
        print('Login procedure ready, getting values..')
        login = true
      end
    else
      -- Get data from webservice
      local data = http.request('http://' .. IP_Address .. '/Unbalanced.htm')
      
      --print(data)
      
      -- Check if data is received
      if not data then
        print('No data found.. , restarting procedure to try again..')
        login = nil
        return
      end
      
      -- Check if login is handled correct
      for i in string.gmatch(data, '<h2>.-</h2>') do
        if i ~= nil then
          login_asked = i:match([[<h2>(.-)</h2>]])
          if login_asked == 'Please log in' then
            print('Login not ready or logged out, system will try to login again..')
            login = nil
            return
          end
        end
      end
      
      -- Power Balancing
      for i in string.gmatch(data, '<input type="text".-</p>') do
        if i ~= nil then
          --print(i)
          
          absolute_maximum_in_We = i:match([[name="t1" value="(.-)"]])
          if absolute_maximum_in_We then
           Absolute_Maximum_In_We_Object = absolute_maximum_in_We
            print('Absolute maximum in We = ' .. absolute_maximum_in_We)
          end
          
          percentage_of_nominal_power = i:match([[name="t2" value="(.-)"]])
          if percentage_of_nominal_power then
           Percentage_Of_Nominal_Power_Object = percentage_of_nominal_power
            print('Percentage of nominal power = ' .. percentage_of_nominal_power)
          end
        end
      end

      -- Add extra data pagefields here...
 end --End Login
end -- End init

BR,

Erwin

I think you are on the other controllers speak. I'm working with this on rs-485. 
http://www.deltaww.com/Products/Category...2%20Series
Reply
#5
Try changing type to "register"
Reply
#6
(25.08.2017, 06:49)admin Wrote: Try changing type to "register"

Thank you very much! Works!

One more question. Can I one and the same port to use for the survey using a script and using the profile? Devices are polled different.
Reply
#7
Yes, but modbus proxy functions must be used, see this post for more info: https://forum.logicmachine.net/showthrea...53#pid1953
Reply


Forum Jump: