SELECT delete_from_table1('commandlog','commandlog','cmdid','cmdtime < extract(epoch FROM (current_date - 15))*1000',500);
(putting aside many other issues for now)
It would help to see the exact output you are getting. The query as written above cannot work with the functions you gave, which have the column name as the FOURTH parameter, and the where clause as the THIRD.
EXECUTE 'DELETE from ' || quote_ident(tblname) || ' where $1 in (select $1 from ' || quote_ident(sel_tblname) || ' where ' || wherecon || ' limit $2 ) ' USING colname, batchsize;
Use FORMAT instead:
EXECUTE FORMAT( 'DELETE from %I WHERE %I IN (SELECT %I FROM %I WHERE %s LIMIT %s)', tblname, colname, colname, sel_tblname, wherecon, batchsize );