通讯实例 当EasyBuilder Pro 没有内建与某一个设备通讯的驱动程序时,我们只能使用宏指令中的 OUTPORT 和INPORT函数来实现与该设备的通讯。 使用 OUTPORT和 INPORT函数发送和接收的数据,必须遵行该设备的通讯协议。 当前例如我们以TK6071IP触摸屏与FBs-10MA永宏PLC为例,介绍两者间如何通过OUTPORT与INPORT宏指令实现通讯。 主要实现通过触摸屏控制PLC的启,停,与读取PLC的X0—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
整套教程已发布于
威纶通触摸屏宏指令入门与精通视频教程
|