luars232串口连接

rs232 = require("luars232")

local delays = require("time_utils").delay
local bord_port_name = "/dev/tty.usbserial-141A"
local IA_port_name = "/dev/cu.usbserial-A102PPO2"
local read_len = 100
local timeout = 100--msec
local port = nil

local function SerialPortConnect(portname,bt)
    -- print("< SerialPort Connect to > : ",portname)
    local err = nil
    err, port = rs232.open(portname)
    print("< SerialPort Connect > : ",portname)
    if err ~= rs232.RS232_ERR_NOERROR then
        print("< SerialPort Connect Fail > :-( ",err)
        return err
    end
    -- set port settings
    if bt == 1 then
        assert(port:set_baud_rate(rs232.RS232_BAUD_115200) == rs232.RS232_ERR_NOERROR)
    else
        assert(port:set_baud_rate(rs232.RS232_BAUD_9600) == rs232.RS232_ERR_NOERROR)
    end
    assert(port:set_data_bits(rs232.RS232_DATA_8) == rs232.RS232_ERR_NOERROR)
    assert(port:set_parity(rs232.RS232_PARITY_NONE) == rs232.RS232_ERR_NOERROR)
    assert(port:set_stop_bits(rs232.RS232_STOP_1) == rs232.RS232_ERR_NOERROR)
    assert(port:set_flow_control(rs232.RS232_FLOW_OFF)  == rs232.RS232_ERR_NOERROR)
    print(":",port)
end

local function SerialPortRead(readlen, _timeout)
    if readlen == nil then readlen = read_len end
    if _timeout==nil then _timeout = timeout end
    local err, data_read, size = port:read(readlen, _timeout)
    -- assert(e == rs232.RS232_ERR_NOERROR)
    print("bord port-read:",err,tostring(data_read),size)
    return err, data_read, size
end

local function SerialPortWrite(str, _timeout)
    if _timeout==nil then _timeout = timeout end
    local err, len_written = port:write(str, _timeout)
    -- assert(e == rs232.RS232_ERR_NOERROR)
    print("port-write:",err,len_written,str)
    return err, len_written
end

local function SerialPortClose()
    local err = port:close()
    return err
end

local function ReadCurrent(portname)
    SerialPortConnect(portname)
    SerialPortWrite("SYSTEM:Remote\r\n")               --切换电流表工作模式
    delays(500)
    SerialPortWrite("MEAS:CURR:DC?\r\n");              --读取电流表电流
    delays(1000)
    local err,ret = SerialPortRead(50,999) ;
    local numret = string.match(tostring(ret),"([+-]%S%S%S%S%S).-[\r\n]");
    local cunt = string.match(tostring(ret),"E-(%d%d)[\r\n]");
    print("Agilent 34401A read current:",tostring(numret),cunt);
    SerialPortClose()
    local result = tonumber(numret)*0.1^cunt*1000       --mA
    return result
end

local table ={x1=0,y1=0,x2=0,y2=0,z1=0,z2=0}
local function Factor_math(x1,y1,x2,y2)
    print("Factor :",x1,y1,x2,y2)
    local gain,offset
    gain = (y1-y2)/(x1-x2)
    offset = y1-(gain*x1)
    print("factor math done,gain="..gain..";offset="..offset)
    return gain,offset
end

local function SerialSend(portname,cmd)
    SerialPortConnect(portname,1) --波特率115200
    port:flush()
    SerialPortWrite(cmd)
    delays(2000)        --read的长度越长,delays的时间越长
    local err,ret,size = SerialPortRead(200,999)
    local result = string.match(tostring(ret),"I=(%S+)[\r\n]")
    SerialPortClose()
    return result
end

local function Factor_write(gain,offset,wtype,hl)
    print("Factor_write:",gain,offset,wtype,hl)
    local wcmd = ""
    if wtype == "set" then
        wcmd = "@ISET_"
    elseif wtype == "read" then
        wcmd = "@IREAD_"
    end

    if hl==1 then
        SerialSend(bord_port_name,wcmd.."LK="..gain)
        delays(100)
        SerialSend(bord_port_name,wcmd.."LE="..offset)
        delays(100)
    elseif hl==0 then
        SerialSend(bord_port_name,wcmd.."HK="..gain)
        delays(100)
        SerialSend(bord_port_name,wcmd.."HE="..offset)
        delays(100)
    end
end

function hly(q1,q2)
    local p1 = q1
    local p2 = q2
    local hl = nil
    if p1<1 and p2<1 then 
        hl = 1
    else 
        hl = 0 
    end
    print("dac set:",p1,p2)
    if(0.01

你可能感兴趣的:(lua)