Trio范例Word文件下载.docx
- 文档编号:7772237
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:23
- 大小:104.91KB
Trio范例Word文件下载.docx
《Trio范例Word文件下载.docx》由会员分享,可在线阅读,更多相关《Trio范例Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。
范例三:
回复:
IFIN
(1)=OFFTHEN
RETURN
ELSE
RETURN1):
in(0)和in
(1)都置为off,单步运行程序,观察结果
2):
in
(1)置为on,单步运行程序,观察结果
3):
in(0)和in
(1)都置为on单步运行程序,观察结果
在观察结果时,打开终端0,观察终端0中的变化,还有注意观察程序运行的流程
案例四:
问:
这几天要做一个中断子程序,原以为trio手册里有这方面的指令,可是找了几天也没找到有关的指令,所以恳求知道中断指令的朋友能给予帮助,能给个例子更好!
在此我先谢谢好心的朋友了!
答:
以HITECH屏为例.通过MODBUSSLAVE模式设定虚拟IO信号可以扩展很多.例如IN(32)和IN(33)分别代表"
运行"
和"
停止"
.
LOOP:
IFIN(32)=0THEN
WA(20)
IFIN(32)=1THEN
RUN"
PROGRAM1"
IFIN(33)=0THEN
IFIN(33)=1THEN
STOP"
GOTOLOOP
以上程序你可以通过下载HITECH的免费软件在电脑上试试.
如果是机器在运行状态你想暂停,可以用FEEDHOLDINPUT(FH_IN)输入来实现,当想停时把FH_IN设成ON,当要从新从原来状态继续运行,则把FH_IN设为OFF就OK了.
范例五:
PROGRAM3IFTHENELSEConditionalTests
1)新建程序,键入以下代码:
IFIN(0)=OFFTHEN
Input0isoff"
打开终端0,in(0)置为off,运行程序,观察结果
2)in(0)置为on,重新运行程序,观察结果。
3)更改程序如下:
ELSE
Input(0)ison"
in(0)置为off运行程序,观察结果,
4)in(0)置为on,运行程序观察结果
范例六:
如何在trio上实现第三方的插补算法?
如果你的要求不是特别的高,那么可以用TrioBasic直接编程实现,首先明确一个概念,通常讲的差补算法主要针对伺服系统位置环的差补,其输出是对应各个轴的速度目标指令,因此在Trio控制器中可以有两种做法:
(TrioBasic支持标准的数学运算,完全可以实现各种复杂的算法)
1.简单做法:
采用Trio控制器内成熟的PID算法,首先在需要差补的各个轴上都执行forward指令,然后通过实时检测mpos值得到当前轴位置,调用自己的差补算法得出下一拍对应轴的目标速度,然后通过给speed进行速度给定。
2.复杂做法:
自己实现最基本的各种算法调节,首先将对应驱动器设置为速度模式,设置Trio控制器对应轴为Servo模式,然后将该轴servo参数设置为0,此时通过mpos可以得到当前轴的位置,mspeed可以得到当前轴的瞬间速度,调用自己编写的算法得出对应目标速度然后通过对DAC参数进行电压输出,做为伺服系统的当前时刻的速度指令。
建议采用单任务模式,可以通过对Ticks参数的操作实现时间片的管理,ticks的精度默认为1ms,最快可以达到0.25ms。
如果您的差补算法比较复杂,而又有实时性及大量应用要求的话,您可以将您的差补算法用c语言编写,并配有必要的接口说明文档发给我们,我们的开发人员会进行评估,如果一切顺利后可以直接加载到控制器内核中,这样你可以象调用move,movecirc指令一样去调用自己的差补指令
范例七:
程序问题
[tr][td]建立了两个程序,名称分别为:
MAIN、JRJ_CAMBOX。
目的是想在MAIN程序里将JRJ_CAMBOX做为任务运行。
在MAIN程序内写如下程序:
loop:
IFIN(0)THEN'
e_stop
JRJ_CAMBOX"
13
GOTOloop
运行MAIN程序,再模拟,将IN(0)设置为ON,结果就提示什么MAIN运行进程号14错误,然后MAIN就不执行了,但是JRJ_CAMBOX倒是在执行了。
为什么?
你做的main程序在不断循环执行,当in(0)被置为1时,第一次系统会正常启动“JRJ_CAMBOX”程序,而且让“JRJ_CAMBOX”程序在第13号任务内运行。
但是当main程序第二次到达if判断时,IN(0)同样条件成立,此时你的程序依然是run"
13而此时第13号任务已经被上次运行的程序占据,所以系统会报错,main程序退出。
如果你把run"
13改成run"
的话,你会看到会有多个JRJ_CAMBOX被运行起来后,main程序同样会报错退出。
这是因为run指令后面不指定任务号时,系统会自动将程序在最大任务号下启动,此时请注意程序和任务的区别!
每个控制器都有其最多执行的任务数量,当到达这个限制值时,系统已经没有更多的任务空间来执行这个程序时,同样会报错,并将报错的程序退出。
范例八:
(接范例七)
程序结构例子
Initialisationofvariables
'
-----------------------------------------------
GOSUBinit_vars
Initialisationofserialports
GOSUBinit_serial
Stopsallmovementsandprograms
GOSUBstop_all
Initialisationaxisparameters
STARTUP"
3
WAITUNTILPROC_STATUSPROC(3)=1
Waituntilprocessisstopped
WAITUNTILPROC_STATUSPROC(3)=0
While(true)
Waitthestartsignal
While(in(start_0)=0)
Checkformotionerror
IFMOTION_ERRORorIN(emerg_stop_1)=0THEN
...
GoSube_stop
Wend
Starttheapplicationprograms
wdog=On
wa(100)
run"
app1"
4
app2"
5
------------------------------------------
Mainloop
runflag=1
While(runflag=1)
IFMOTION_ERRORTHEN
GoSubm_error
runflag=0
Checkforemergencystop
IFIN(emerg_stop_1)=0THEN
Wend
m_error:
Stopallmovements
Return
e_stop:
EmergencyStop
GoSubStop_all
stop_all:
Stopsallprograms
Stopsallpossiblemoves
RAPIDSTOP
FORi=0TO2
BASE(i)
CANCEL
(1)
CANCEL
WAITIDLE
DATUM(0)'
Resetthepossiblefollowingerror
SERVO=OFF
NEXTi
BASE(0)
Disableallaxis
WDOG=OFF
init_vars:
init_serial:
setcom(38400,8,1,2,1,4)
范例九:
程序结构的问题
建立了两个程序,名称分别为:
是我程序有问题,还是仿真器的问题?
因为我发现这个仿真器不完善,而且我又是自学TRIO这个东西,没有实际的硬件模拟,很头疼。
哎,为什么这个仿真器就不能完善点呢,不然象我们这种初学者都不知道到底是程序问题还是仿真器的问题,郁闷
你的程序有问题,你做的main程序在不断循环执行,当in(0)被置为1时,第一次系统会正常启动“JRJ_CAMBOX”程序,而且让“JRJ_CAMBOX”程序在第13号任务内运行。
续
[tr][td=3,1]
[tr][td]谢谢Trio技术支持,按你的说法,改成如下即可.
IFIN(0)THENSTOP"
GOTOloop
主要是用习惯了PLC的编程习惯,所以一时绕不过弯来,呵.其实我想做的是:
模仿PLC编程思维,建立一个主程序MAIN,在这里面循环执行对外部信号的监控,比如急停信号IN(0),启动信号IN
(1)......我开始写的程序的意思就是想在没有急停时运行任务,而有急停时则停止该任务,但是当急停取消后,它又会执行的.
[tr][td=1,1,160]Trio技术支持:
[/td][td=2,1,587]播客博客引用加为好友发送留言 2007-5-2311:
28:
00[tr][td=3,1]
[tr][td]给你个例子程序:
Initialisationofvariables
再续
[tr][td]再来一个问题:
在一个进程(任务)中,想要实现对上位机(触摸屏)上一个按扭的上升沿动作,比如触摸屏内设置两个按扭分别为A和B,那么要求按下A(即使是不松开),那么轴0前进10个用户单位,然后只有松开A再按下(即有一个上升沿动作)才会再前进10个用户单位.即相当于“点动”功能了。
当然还得要求对这个进程是实时监控的,就是无论什么时候A有一个上升沿,那么前进10,B有一个上升沿,那么后退10...这中间还可以随时响应其他的命令。
有什么好的办法吗?
[/td][td=2,1,587]播客博客引用加为好友发送留言 2007-5-2417:
13:
[tr][td]It'
sveryeasytodo,justlikethis:
base(0)
whiletrue
Ifin(a)=1anda_flag=0then
ifmtype=idlethen
move(10)
endif
a_flag=1
ifin(a)=0thena_flag=0
Ifin(b)=1andb_flag=0then
move(-10)
b_flag=1
ifin(b)=0thenb_flag=0
wend
范例十:
逻辑判断例子
在一个进程(任务)中,想要实现对上位机(触摸屏)上一个按扭的上升沿动作,比如触摸屏内设置两个按扭分别为A和B,那么要求按下A(即使是不松开),那么轴0前进10个用户单位,然后只有松开A再按下(即有一个上升沿动作)才会再前进10个用户单位.即相当于“点动”功能了。
ifin(a)=0thena_flag=0
范例十一:
回原点,为什么回原点信号就停了呢?
请TRIO师傅帮忙一下了
[tr][td]loop:
IFIN
(1)=1ANDg_run_flag=0ANDg_zero_flag=0THEN
g_zero_flag=1
IFg_zero_flag=1ANDIN
(1)=1THEN
P_GAIN=0.32
I_GAIN=0.008
VFF_GAIN=1
UNITS=1
SERVO=1
FE_LIMIT=100
SPEED=2000
ACCEL=10*SPEED
DECEL=10*SPEED
CREEP=1
FWD_IN=-1
REV_IN=-1
DATUM_IN=0
INVERT_IN(0,ON)
DATUM(3)
MOVE(-10000)
DEFPOS(0)
IFIN(0)=0ANDg_zero_flag=1THEN
g_zero_flag=0
ENDIFVR(cur_couts)=108
回原点是一次性行为,没必要做一个循环。
需要再次回原点,也只需再调用该程序一次。
FEEDHOLD_IN(FH_IN)设定一个进给保持(暂停)输入,就可以实现你想要的功能。
该输入有效,机器就暂停,该输入又复位,机器就继续运行。
范例十二:
『原创』
InitData'
GOSUBinit_data
Initialisationofserialports-----------------------------------------------
Stopsallmovementsandprograms'
Initialisationaxisparameters'
Waituntilprocessisstopped
WA(200)
WDOG=ON
WA(10)
ReturnMachineHomeWhenPowerOn
GOSUBzero_m4
---------------------------MainCycleStart----------------------------------'
WHILE(TRUE)
Starttheapplicationprograms
IFIN(safety_gate)=0ANDIN(emg_stop)=0ANDIN(line_cut)=0THEN
TABLE(display_alarm,0)
WAITUNTILPROC_STATUSPROC(5)=1
6
WAITUNTILPROC_STATUSPROC(6)=1
CLEAR_BIT(4,1)
IFIN(safety_gate)=1THEN'
SafetyGateAlarm
TABLE(display_ala
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Trio 范例