威纶通触摸屏宏指令,PLC指令分类函数,详解与实操
视频加载中...
前面小节我们介绍过数学运算,字符串处理,数据转换,数据操作,宏控制分类函数,
这小节我们继续了解PLC分类下的函数,通过编写程序来实践。
宏指令在编写过程当中我们可以使用PLC相关的函数控制与触摸屏连接的硬件,
读取硬件数据,也可以向硬件写入数据,当然也可以读写触摸屏自己寄存器的数据。
这类函数共有5个,分别是 GetData,GetDataEx, SetData, SetDataEx, GetError。
下面是每个函数的介绍。
1.GetData。
函数用于从PLC等硬件读取数据,实际使用频率非常高。
例如int result[2],result1
GetData(result[0], "FATEK FB Series", D, 0, 1)
此函数从永宏PLC(FATEK FB Series)读取数据,
读取的寄存器起始地址为 D 0,
读取的数据个数为1个,
结果保存在result数组里,我们传递的数组元素类型为int,所以读取数据为1个整数。
这里的硬件名称” FATEK FB Series”为我们在编程软件里添加的硬件,
在创建一个触摸屏项目时会提示添加硬件,
默认只有触摸屏一个硬件,名称为“Local HMI”。
然后是硬件的寄存器地址,我们知道PLC一般都有X,Y,M,D等类型寄存器,
每种寄存器都有很多供使用,比如D0表示第0个数据寄存器,
在这个函数中就可以传递寄存器类型加索引来访问,
另外还有一种情况,一屏多机时,可以修改寄存器索引使用形式。
例如,我们修改为
GetData(result[0], "FATEK FB Series", D, 2#0, 1)
表示读取第二台plc的D0数据,上面函数中的2表示PLC站号,
只有一个PLC可以不填写。
用于存储结果的变量,可以是一个数组变量,也可以是一个单一变量,
变量类型可以是short,int,float,或bool。
例如下面代码表示读取触摸屏LB0的状态。
Bool result
GetData(result, " Local HMI ", LB, 0, 1)
例如下面代码表示读取触摸屏LW0开始的两个short数据。
short result[2]
GetData(result, " Local HMI ", LW0, 2)
例如下面代码表示读取触摸屏LW0开始的1个浮点数据。
浮点数占用4个字节,所以这里实际读取了LW1,LW0到变量result里。
Float result
GetData(result, " Local HMI ", LW, 0, 1)
2. GetDataEx。
这个函数与GetData使用上是一致的,只是触摸屏在执行这个函数时,
不会等其执行完返回,再往下执行其他代码。
这个功能和前小节介绍的异步调用宏指令,概念上是相似的。
我们知道PLC与触摸屏通讯时,有可能受到干扰,延时响应的,
这个函数可以不等PLC响应,径直执行其他代码,防止程序阻塞。
函数执行的结果可以使用,GetError获取,不为0表示未正确执行。
3. SetData。
有数据获取,对应就有数据设置。
这个函数用于将指定数据写入到PLC等硬件中。
例如下面代码,实现将123写入到触摸屏LW1寄存器中,共写入1个整数。
Int nValue=123.
SetData(nValue, "Local HMI", LW, 1, 1)
参数的含义与函数GetData一致。
4. SetDataEx。
这个函数和SetData在使用上一致,触摸屏在调用这个函数时,
也不会等待其执行完成再执行其他函数。
同样也可以通过函数GetError获取执行结果,不为0表示未正确执行。
5. GetError.
此函数获取其他函数执行结果。
可以在SetDataEx,GetDataEx执行后调用。
从而判断函数执行是否成功。获得错误代码为0表示成功,其他表示不成功。
例如
short nValue
SetDataEx(nValue, "FATEK FB/FBs/B1/B1z Series", D, 0, 1)
int error
GetError(error)
如果上面的函数SetDataEx执行成功,则error为0,不然为非0值。
GetDataEx执行失败,GetError(error) ,error=1
SetDataEx执行失败,GetError(error) ,error=2
我们可以在编写宏指令,编程软件里测试测试这几个函数的功能。
在界面上添加三个数值显示元件,地址LW0用于输入设置值,地址LW1用于显示设置值,
地址LW2用于显示错误代码,再添加宏调用元件,测试编写的宏代码。
界面如下图。
宏指令如下,可以使用屏蔽的代码测试。
macro_command main()
short nValue=123
//GetDataEx(nValue, "Local HMI", LW, 0, 1)
//GetDataEx(nValue, "FATEK FB/FBs/B1/B1z Series", D, 0, 1)
SetDataEx(nValue, "FATEK FB/FBs/B1/B1z Series", D, 0, 1)
int error
GetError(error)
if(0== error) then
//SetData(nValue, "Local HMI", LW, 1, 1)
else
SetData(error, "Local HMI", LW, 2, 1)
end if
end macro_command
威纶通触摸屏宏指令,统合应用,与PLC自由通讯
想学习威纶宏指令的朋友,
可以关注前面的其他小节。
我们知道市面上硬件有非常多,
威纶不可能支持所有硬件的通讯,
所以它提供了宏指令让我们自己来实现。
学会宏可以极大的提升我们的触摸屏编程能力。
这小节我们以一个通讯实例结束威纶宏编程教程。
任何两个硬件通讯前,无线的还是有线的,都必须建立连接。
一般触摸屏通过以太网网络或串口通讯与其他硬件相连。
这里我们以威纶触摸屏TK6071IP和台湾永宏可编程控制器FBs系列为例,
讲解如何通过自由通讯协议,
通过编写宏指令,让两个硬件实现通讯。
其实威纶是支持永宏PLC的,我们这里假设它不支持,
看下威纶触摸屏是如何与自己不支持的硬件通讯上的。
这个过程一般分为三步。
某宝一般有定制版的,可以在上面买,
也可以查阅硬件手册,自己制作数据线。
如我们查阅的触摸屏与PLC的硬件手册,
得到通讯端口针的定义如下:
很明显,
PLC通讯端口九针侧,
3为接收数据RxD,
2为发送数据TxS,
5为公共接地GND。
触摸屏通讯端口侧,
6为发送数据TxD,
9为接收数据RxD,
5为公共接地GND。
所以针脚3连6, 2连9,5连5,
就能做成一根屏与PLC的通讯数据线。
2.熟悉硬件的通讯协议。
熟悉或不熟悉的硬件,
在使用时我们都会习惯性的准备对应的手册,
比如接线时,我们会参考硬件的用户手册。
编程时,我们会下载编程手册。
这里我们要实现串口通讯,
所以我们也会准备硬件的通讯手册。
这里我们准备了PLC的通讯手册,
里面介绍有通讯协议相关知识。
翻阅手册,我们知道了PLC每个通讯帧的格式,
如下图。
帧头帧尾固定为0X02,0X03;PLC站号,
命令码占一个字节,分高低两部分。
校验码也占一个字节,分高低两部分,
为前面数据相加之和。
翻阅通讯手册,我们还知道了命令码的具体支持哪些,
如下图,截取了永宏PLC支持的部分命令码,
我们这里会选择使用两命令码作演示。
41,控制PLC的启停,
46,读取PLC连续多个寄存器资料。
1)控制PLC的启停(指令41 )
翻阅通讯手册,我们也能找到每个指令的解释与实例。
如下两图,为命令码41的格式与实例,
控制码为0表示停止PLC,为1表示启动PLC。
根据这些信息,我们就可以编写出控制PLC启停的帧,
以及PLC回应的帧我们也能提取出信息,具体代码在下面。
PLC回应的帧我们这里不核对校验码,
简单通过判断错误码来判断PLC是否成功执行指令。
错误码为0表示PLC执行成功。
如下图指令格式中,错误码在第5个字节。
我们就可以写出控制PLC启动与停止指令。
char c[9]
c[0] = 0x02
c[1] = '0' //0x30
c[2] = '1' //0x31
c[3] = '4' //0x34
c[4] = '1' //0x31
//0x30 为停止PLC指令,
//0X31为启动PLC指令.
c[5] = ‘0’
//c[6],c[7]为和校验码,
//即前面数据相加c[6]为高字节,
//c[7]为低字节。
c[6]
c[7]
c[8] = 0x03//帧尾
2)读取PLC连续多个寄存器资料(指令46 )
翻阅通讯手册,我们也能找到指令46的解释与实,
如下两图。
读取的寄存器个数在第一个字节指定,
读取的起始寄存器地址紧跟其后,
传统6个字节表示单字寄存器,
传递7个字节表示双字寄存器,
PLC支持的寄存器手册上也有介绍,
在后边有截图。
PLC回应帧格式里,
我们也能看出错误码在第5个字节,其后紧跟数据。
下面是PLC所支持的寄存器列表,
我们要演示的是读取WX0000一个字的内容。
也就是读取X0.0到x0.15的状态。
我们就可以写出读取PLC的WX0000的指令
char cFrame[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
cFrame[13]//校验码
cFrame[14]
cFrame[15] =0x03//帧尾
3.编写代码与调试。
通过通讯手册获取协议信息,
就可以通过协议的约定来编写宏代码。
宏代码的编写是对我们前面小节介绍全部宏指令的一个综合应用。
我们可以多练习再借助宏输入窗口,熟悉使用威纶宏指令。
课前,我已在硬件上调试通过了下面的代码,可以参阅练习。
相关问答
plc编程都需要学习了解哪些东西
[最佳回答]plc入门基础知识有如下:必须掌握一定的电工基础:掌握传感器,接近开关,编码器等常用的器件的使用及接触器宏高和的工作原理。掌握计算机的基础知识:...
西门子宏程序肿么编-ZOL问答
你是问宏指令还是子程序还是变量西门子带宏字眼的只有一个就是宏指令但是整个高级编程几乎全是讲得宏技术很广的的就是我花一星期没日没夜的讲也讲不完...
plc各个代码意思?
不同商家的PLC有不同的编程语言,但就某个商家而言,PLC的编程语言也就那么几种,下面以PLC编程语言为例,简单描述下一、指令系统:按照使用的情况分,大致分为...
ab系列plc变量命名规则?
AB系列PLC变量命名规则通常包括以下几个方面。首先,变量命名应具有描述性,能够准确反映其功能、用途或特性,方便后续维护和阅读代码。其次,变量命名应使用...
PLC编程难学吗?-ZOL问答
PLC编程难学吗?举报7人讨论9480次围观关注问题写回答讨论回答(7)linhua61看你学来干什么的要是只是开数控铣的哪就比较简单了,只要学下基本理论加上去实...
大佬们求解宁德永宏plc公司联系方式,永宏plc外观怎么样??
[回答]1、永宏PLC的编程软件目前现在还没有仿真功能。2、联机成功,即表示现在已经在监控状态,监视页里的R0和R1是暂存器,用来储存数值的,和普通的暂存器一...
PLC的宏里没有输入输出,PLC的RS232模块接的是传感器,触摸屏没有数值显示?
1、首先触摸屏里面选择的设备一定要和你的设备一致2、宏参数不是必须的,但是地址是必须要的3、通讯接口和协议务必要一致满足以上即可1、首先触摸屏里面选...
好不好通过威纶触摸屏来读取plc程序-ZOL问答
3.点击确定之后,会自动弹出系统参数设置或者在画面组态内选择系统参数设置也可以选择PLC型号。4.选择新增即可添加PLC机型。5.设置通讯参数。根据PLC通讯设置...
plc如何实现两轴的线速度相等?
PLC控制的四台变频器线速度同步方案:变频器带PG卡做伺服控制其中一台做主,PG卡上的脉冲输出口接第二台的脉冲输入,依此类推PLC给几个变频器同时正反转启...
PIC的标准编程语言分别是?
一、PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作...指令格...