正运动Basic语言开发技巧

Basic语言开发技巧

正运动控制器支持Basic,PLC编程。PLC编程与三菱PLC梯形图编程相似,而Basic语言开发则跟高级语言开发相似,有任务(高级语言开发里边的线程),最大的区别是程序从上往下扫描一次。

正运动的Hmi的按钮等操作可以直接访问Basic语言里边的全局变量,对气缸,轴的控制,可以使用同一个函数根据不同的参数值来实现。

在编写每个工位自动逻辑时,可以使用数组,建立输入,输出,气缸,轴的数组,在对应的数组里边添加此工位使用的点位,气缸和轴。在编程的时候,使用数组的索引来获取对应的数值,然后再调用气缸、轴控制函数来实现功能,具体的看代码。

GLOBAL system_state '系统状态

GLOBAL system_run '系统运行
GLOBAL system_pause '系统暂停
GLOBAL system_stop '系统停止

'输入点定义
GLOBAL I_Start = 0 '启动
GLOBAL I_Stop 	= 1 '停止
GLOBAL I_Reset = 2 '复位
GLOBAL I_PushCylInP 	= 3 '推料气缸到位
GLOBAL I_PushCylInS 	= 4 '推料气缸原位
GLOBAL I_LiftCylInP 	= 5 '升降气缸到位
GLOBAL I_LiftCylInS 	= 6 '升降气缸原位
GLOBAL I_AxisLoadDatum 	= 7 '上料轴原点
GLOBAL I_AxisLoadFS 	= 8 '上料轴正极限
GLOBAL I_AxisBlankDatum 	= 9 '下料轴原点
GLOBAL I_AxisBlankFS 	= 10 '下料轴正极限


GLOBAL I_AxisLoadAlm = 12 '上料轴报警
GLOBAL I_AxisBlankAlm = 13 '下料轴报警


'输出点定义
GLOBAL O_GreenLight = 0 '绿灯
GLOBAL O_RedLight = 1 '红灯
GLOBAL O_PushCylOutP = 2 '推料气缸推出
GLOBAL O_PushCylOutS = 3 '推料气缸缩回
GLOBAL O_LiftCylOutP = 4 '升降气缸下降
GLOBAL O_AxisLoadEn = 10 '上料轴使能
GLOBAL O_AxisBlankEn = 11 '下料轴使能

'气缸定义
GLOBAL Cyl_Pushing  = 0 '推料气缸
GLOBAL Cyl_Lifting  = 1 '升降气缸

'轴定义
GLOBAL Axis_Loading  = 0 '上料轴
GLOBAL Axis_Blanking  = 1 '下料轴

'气缸相关信息
GLOBAL DIM Cylinder(10) '气缸集合
Cylinder(0,Cyl_Pushing,Cyl_Lifting)'从0开始赋值


GLOBAL DIM Cyl_InPlace(10) '气缸到位输入
Cyl_InPlace(0,I_PushCylInP,I_LiftCylInP) '这个顺序要与气缸赋值顺序一致

GLOBAL DIM Cyl_InSitu(10) '气缸原位输入
Cyl_InSitu(0,I_PushCylInS,I_LiftCylInS)

GLOBAL DIM Cyl_OutInPlace(10) '气缸到位输出
Cyl_OutInPlace(0,O_PushCylOutP,O_LiftCylOutP)

GLOBAL DIM Cyl_OutInSitu(10) '气缸原位输出 '如果是单控的气缸,那么不需要输入这个,填写-1即可
Cyl_OutInSitu(0,O_PushCylOutS,-1)

'轴相关信息
GLOBAL AxisArray(10) '轴集合
AxisArray(0,Axis_Loading,Axis_Blanking)

GLOBAL AxisEnable(10) '轴使能
AxisEnable(0,O_AxisLoadEn,O_AxisBlankEn)

GLOBAL AxisAlm(10)'轴报警
AxisAlm(0,I_AxisLoadAlm,I_AxisBlankAlm)

GLOBAL AxisDatumIn(10)'轴原点
AxisDatumIn(0,I_AxisLoadDatum,I_AxisBlankDatum)

GLOBAL AxisFSLimit(10)'轴正极限
AxisFSLimit(0,I_AxisLoadFS,I_AxisBlankFS)

GLOBAL AxisRSLimit(10)'轴负极限 '回完原点后,负极限就设置为跟原点一样的信号
AxisRSLimit(0,I_AxisLoadDatum,I_AxisBlankDatum)

'气缸控制
GLOBAL SUB CylinderControl(cylnum,bValue,timeout)
	LOCAL home,place
	CylRetry:
	IF SUB_IFPARA(2) = 0 THEN timeout = 5000
	OP(Cyl_OutInPlace(cylnum)) = bValue
	IF Cyl_OutInSitu(cylnum) != -1 THEN OP(Cyl_OutInSitu) = NOT bValue
	IF bValue THEN 
		place = Cyl_OutInPlace(cylnum)
		home = Cyl_OutInSitu(cylnum)
	ELSE 
		place = Cyl_OutInSitu(cylnum)
		home = Cyl_OutInPlace(cylnum)
	ENDIF
	TICKS = timeout
	WHILE TICKS<0 OR (IN(place) = ON AND IN(home) = OFF)
		CheckContinue()
	WEND
	IF NOT(IN(place) = ON AND IN(home) = OFF) THEN 
		ERROR "气缸动作失败"
		'可以暂停程序,将设备模式设置为暂停模式,同时改变三色灯状态
		GOTO CylRetry
	ENDIF
ENDSUB

'检测是否暂停
GLOBAL SUB CheckContinue()
	WHILE system_state =system_pause 
		DELAY(1)
	WEND

ENDSUB

'轴控制
GLOBAL SUB AxisControl(axisnum,axisspeed,pos,timeout,stopsign)
	AxisRetry:
	IF SUB_IFPARA(3) = 0 THEN timeout = 10000
	BASE(axisnum)
	SPEED = axisspeed 
	MOVEABS(pos)
	TICKS = timeout 
	WHILE TICKS < 0
		IF SUB_IFPARA(4) = 0 THEN
			IF IN(stopsign) THEN EXIT WHILE
		ENDIF
		CheckContinue()
	WEND
	IF IDLE(axisnum) = 0 THEN 
		CANCEL(2) AXIS(axisnum)
	I	WAIT UNTIL	 AXISSTATUS(axisnum) & $800 = 1
	ENDIF 
	IF AXISSTATUS(axisnum) <> 0 THEN
		ERROR "轴状态为",AXISSTATUS(axisnum) 
		'可以暂停程序,将设备模式设置为暂停模式,同时改变三色灯状态
		GOTO AxisRetry
	ENDIF

ENDSUB


'上料程序
GLOBAL SUB	 Loading()
	'输入点
	GLOBAL DIM Load_In(10)
	Load_In(0,I_Start)
	
	'输出点
	GLOBAL DIM Load_Out(10)
	
	'气缸
	GLOBAL DIM Load_Cyl(10)
	Load_Cyl(0,Cyl_Pushing)
	
	'轴
	GLOBAL DIM Load_Axis(10)
	Load_Axis(0,Axis_Loading)
	
	LoadingStart:
	
	WAIT UNTIL IN(Load_In(0)) '等待启动信号
	
	CylinderControl(Load_Cyl(0),ON,10000)
	
	AxisControl(Load_Axis(0),200,300,10000)
	
	
	
	
	
	
	GOTO LoadingStart

ENDSUB



















有需要的话,可以私信拿项目文件
如有疑问或文档里存在错误,烦请私信下,予以改正

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值