User define

Last modified by Leo Wei on 2023/08/24 14:11

User define

More serial port script instruction,please refer manual:Lua script function--->3.Serial port operation

Read the temperature sensor.

the commond format is as beliow:

Send commond:01 03 02 00 00 03 04 73

Feedback commond:01 03 06 07 F7 0E 7E B7 35

Temperature data:07 F7,desimal = 2039,it means temperature is 20.39℃.

Humidity data:0E 7E,desimal = 3710, it mean humidity is 37.10%RH.

Script Demo:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

function com.main()
    --dosomething
    openPlc()
  end
  function openPlc()
      if obj then
          -- If the serial port opened,then read/write data by timing

            local wri = string.pack(">HHHH",0X0103,0X0200,0X0003,0X0473)
              local arr = reading(wri)
              -- if arr ~=nil then
              --     if arr[1] ==33 and arr[2] ==v[2][2] and arr[3] ==v[2][3] then
              --         local A = arr[4]*256
              --         local B = A+arr[5]
              --         addr_setword(v[1],B)
              --     end
              -- end

     else
          --judge if there is a serial object, then initialize and open the serial port
         local configs = {
              name = 'COM1',      --Select serial port COM1
              mode = 485,         --Communication mode RS485
              baud_rate = 9600,   --Baud rate 9600
              stop_bit = 1,       --stop bit 1
             data_len = 8,       --data length 8
             check_bit = 'NONE', --no parity

        }
          obj,err = serial.open(configs) --Open serial port
         if not obj then
           print("serial open :failed", err) -- Open serial port failed
                 end
      end
  end

 function reading(wri)
      obj:flush() -- Clear serial port
     obj:write(wri)  -- Write serial port
     print(string.byte(wri,1,#wri))
      obj:flush() -- Clear serial port 
     local readed =obj:read(9,1000) -- Read 9 bytes, timeout 1 second
     if readed and readed ~= "" then 
          -- judge that a non-empty string is read
         print(string.byte(readed,1,#readed))
          a={string.byte(readed, 1, #readed)}
        if nil ~= a[4] and nil ~= a[5] and nil ~= a[6] and nil ~= a[7] then
          a1=a[4]*256+a[5]
          a2=a[6]*256+a[7]
          addr_setword("@HDW0",a1)
          addr_setword("@HDW1",a2)
        end
          return {string.byte(readed, 1, #readed)}
      elseif readed == nil then
          print("serial read err:", err or "")
          return nil
      end
      return nil
  end

--------------------------------------------------------------------------------------------------------------------------------------------------------------------