mpg пульта для прокрутки MDI истории в Axis
когда то писал компонент mpg_go для других целей,подправил для этого:
Код: Выделить всё
component mpg_go ;
pin in s32 in;
pin out s32 out;
pin out bit tick; //true if we have a change in couns
pin io bit off;
variable double old;
function _;
license "GPL";
;;
#include "rtapi_math.h"
FUNCTION(_) {
double tmp = in;
if(!out) out = 1;
if(tmp != old) tick = 1;
if(off) {tick = 0; off = 0;}
if(tmp == old) return;
if(tmp < old) out = -1;
else out = 1;
old = tmp;
}
в файл axisrc , а лучше в файл ,который выполняет функции axisrc (USER_COMMAND_FILE ):
Код: Выделить всё
if hal_present == 1 :
ucomp = hal.component("axisui.user")
ucomp.newpin('updown', hal.HAL_S32, hal.HAL_IN)
ucomp.newpin('tick', hal.HAL_BIT, hal.HAL_IN)
ucomp.newpin('off', hal.HAL_BIT, hal.HAL_IO)
ucomp.newpin('go', hal.HAL_BIT, hal.HAL_IN)
ucomp.ready()
def user_live_update():
if ucomp['tick']:
if ucomp['updown'] > 0:
commands.mdi_up_cmd()
ucomp['off'] = 1
if ucomp['updown'] < 0:
commands.mdi_down_cmd()
ucomp['off'] = 1
if ucomp['go']:
commands.send_mdi()
в postgui.hal :
Код: Выделить всё
loadrt mpg_go
addf mpg-go.0 servo-thread
net demuxS32:out0 mpg-go.0.in
net index mpg-go.0.out axisui.user.updown
net tick mpg-go.0.tick axisui.user.tick
net off mpg-go.0.off axisui.user.off
# button mdi Go
net button:y0 axisui.user.go
по сигналам:
demuxS32:out0 - это тики нашего MPG
button:y0 - кнопка пульта для выполнения команды MDI
---------------------
https://www.youtube.com/watch?v=X9R3icekrTY