QQ登录

只需一步,快速开始

威纶通触摸屏宏指令通讯实例

[ 复制链接 ]

通讯实例
EasyBuilder Pro 没有内建与某一个设备通讯的驱动程序时,我们只能使用宏指令中的 OUTPORT INPORT函数来实现与该设备的通讯。
使用 OUTPORT  INPORT函数发送和接收的数据,必须遵行该设备的通讯协议。
当前例如我们以TK6071IP触摸屏与FBs-10MA永宏PLC为例,介绍两者间如何通过OUTPORTINPORT宏指令实现通讯。
主要实现通过触摸屏控制PLC的启,停,与读取PLCX0—X15的状态,屏界面如下

威纶通触摸屏宏指令通讯实例

威纶通触摸屏宏指令通讯实例
点击启动PLC,停止PLC,分别调用两宏实现PLC启动与停止,宏代码为
StopPLC宏函数:
macro_commandmain()
charcCheck
charc[9]
FILL(c[0],0,9)
c[0] =0x02
c[1] ='0' //0x30
c[2] ='1' //0x31
c[3] ='4' //0x34
c[4] ='1' //0x31
c[5] ='0' //0x30 //停止PLC指令
ADDSUM(c[0],cCheck, 6)
c[6] =(cCheck&0xF0)>>4//提取数值如0X0F
c[7] =cCheck&0x0F//提取数值如0X08
//转换为对应ASCII
ifc[6]>0x09 then
   c[6] = c[6]+0x37
else
   c[6] = c[6]+0x30
end if
ifc[7]>0x09 then
   c[7] = c[7]+0x37
else
   c[7] = c[7]+0x30
endif  
TRACE("%c,%c",c[6],c[7])//调试查看值
//c[6] ='F' //0x46
//c[7] ='8' //0x38
c[8] =0x03
OUTPORT(c[0],"Free Protocol", 9)//数据输出
shortnRst
INPORT(c[0],"Free Protocol", 9, nRst)
charcRst[100]
ifc[5]==0x30 then
   StringCopy("Executedsucceed",cRst[0] )
else
   StringCopy("Executedfailed",cRst[0] )
end if
SetData(cRst[0],"Local HMI", LW, 0, 100)
endmacro_command
StartPLC宏函数:
macro_commandmain()
charc[9]
FILL(c[0],0,9)
c[0] =0x02
c[1] ='0' //0x30
c[2] ='1' //0x31
c[3] =0x34
c[4] =0x31
c[5] =0x31//启动PLC指令
c[6] =0x46
c[7] =0x39
c[8] =0x03
OUTPORT(c[0],"Free Protocol", 9)
shortnRst
INPORT(c[0],"Free Protocol", 9, nRst)
charcRst[20]
ifc[5]==0x30 then
   StringCopy("Executedsucceed",cRst[0] )
else
   StringCopy("Executedfailed",cRst[0] )
end if
SetData(cRst[0],"Local HMI", LW, 0, 20)
endmacro_command
点击读取函数,将X0-X15状态读取到触摸屏并显示出来,
对应的宏指令代码为:
macro_commandmain()
charcFrame[255]
charcCheck
FILL(cFrame[0],0,255)
cFrame[0]= 0x02//帧头
cFrame[1]= 0x30//plc 站号
cFrame[2]= 0x31
cFrame[3]= 0x34//连续寄存器读取指令
cFrame[4]= 0x36
cFrame[5]= 0x30//读取1个寄存器
cFrame[6]= 0x31
cFrame[7]= 0x57//寄存器起始码 WX0000
cFrame[8]= 0x58
cFrame[9]= 0x30
cFrame[10]= 0x30
cFrame[11]= 0x30
cFrame[12]= 0x30
//计算ASCII形式校验码
ADDSUM(cFrame[0],cCheck, 13)
cFrame[13]= (cCheck&0xF0)>>4
cFrame[14]= cCheck&0x0F
if(cFrame[13]>0x09) then
cFrame[13]= cFrame[13]+0x37
else
cFrame[13]= cFrame[13]+0x30
end if
if(cFrame[14]>0x09) then
cFrame[14]= cFrame[14]+0x37
else
cFrame[14]= cFrame[14]+0x30
end if
cFrame[15]= 0x03
OUTPORT(cFrame[0],"Free Protocol", 16)
FILL(cFrame[0],0,255)
shortreturnValue
INPORT(cFrame[0],"Free Protocol", 13, returnValue)
//接收数据数个数不对,显示接收的数据
if(returnValue<> 13)then
SetData(cFrame[0],"Local HMI", LW, 0, returnValue)
return
end if
//错误码验证
if(cFrame[5]<>'0')then
SetData(cFrame[5],"Local HMI", LW, 0, 4)
return
end if
//校验码验证略过
charcC[2]
//提取数据
shortnValue
charcValue[4]
cValue[0]= cFrame[6]
cValue[1]= cFrame[7]
cValue[2]= cFrame[8]
cValue[3]= cFrame[9]
StringHexAsc2Bin(cValue[0],nValue)
SetData(nValue,"Local HMI", LW, 100, 1)
endmacro_command


整套教程已发布于
威纶通触摸屏宏指令入门与精通视频教程

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索