如图,这小节我们介绍自由协议分类下的函数。这些函数可以
将数据通过串口发送,也可以
从串口读取数据,也可以清空
串口缓存数据。我们可以通过
这些函数和任意硬件实现通讯。
所以这些函数相对来说比较重要。
威纶通触摸屏宏指令,通讯自由协议函数,详解与实操威纶通触摸屏宏指令,通讯自由协议函数,详解与实操
自由通讯分类函数共有7个,分别是GetCTS,SetRTS,
IMPORT, IMPORT2, IMPORT3,OUTPORT,PURGE.
可以实现获取与设置串口信息请求发送/清除发送信号,
从串口获取与输入数据。
以及清空串口缓存区数据。
同样在操作这些函数前,
我们也可以在界面上准备几个元件,
用于显示函数执行的结果。
添加两个位状态设置元件,
用于调用宏指令,
添加一个数值元件,用于显示结果。
如图。
威纶通触摸屏宏指令,通讯自由协议函数,详解与实操
IMPORT。
函数用于从串口或以太网读取数据。
例如
char c[9]
short n
INPORT(c[0], "Free Protocol", 9, n)
表示函数以自由通讯方式从串口读取硬件Free Protocol的数据,
结果保存在数组c的元素0开始的9个元素里。
实际读取的数据个数保存在n中 。
2. IMPORT2。
函数与上面IMPORT一样也是用于从串口读取数据,只是添加了等待功能。
例如
char c[9]
short n
INPORT2(c[0], "Free Protocol", n, 100)
表示函数从串口获取数据存储在数组C里,在等待100ms后未再收到任何数据,则函数返回。
实际读取的数据个数保存在变量n里。
3. IMPORT3。
与前面IMPORT函数一样,此函数也是用于从串口读取数据。
例如
char c[9]
short n
INPORT3(c[0], "Free Protocol", 9, n)
表示函数以自由通讯方式从串口读取硬件Free Protocol的数据,
结果保存在数组c的元素0开始的9个元素里。
实际读取的数据个数保存在n中 。
如果还有未读取的数据,则会会保留于HMI内存缓冲区中,留待下次读取,避免数据遗失。
4.OUTPORT。
此函数用于将数据写入到串口中。
例如
char c[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)
表示将数组从元素0开始的9个数据写入到串口中,
也就是发送到硬件Free Protocol ,以控制PLC启动。
5. PURGE。
此函数用于清空指定串口的输入与输出缓存区数据。
在出现通讯错误,异常中断,或其他情况都可以调用此函数清空串口缓存区的数据。
例如
PURGE(1)
表示清空串口1的缓存区数据。
官方介绍支持COM1 ~ COM3,也就是说可传递的参数可以为1,2,3。
6. GetCTS。
用于获取指定串口CTS信号状态,支持COM1.
例如
short n
GetCTS(1, n)
表示获取串口1的CTS信号,保存到变量n里。
CTS 在高电位,n为1,否则为0.
7. SetRTS。
用于设置指定串口RTS信号状态,支持COM1.
例如
short n=1
SetRTS(1, n)
表示设置串口1的RST信号为1.
当传入的 n 参数值大于 0 时,将拉高 RTS 电位,
当 n 参数值等于 0 时,将拉低 RTS 电位。
CTS和RTS信号在通讯时相当于一种握手协议,一般我们不使用握手协议。
而是通过代码实现主从收发数据,所以在硬件上,
串口通讯一般也就有三根线:数据收,发,公共线。
可以使用下面代码查看执行结果,也可以观看视屏的演示。
macro_command main()
char c[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)
short n
FILL(c[0],0,9)
PURGE(1)
GetCTS(1, n)
SetRTS(1, n)
INPORT(c[0], "Free Protocol", 9, n)
//INPORT2(c[0], "Free Protocol", n, 100)
//INPORT3(c[0], "Free Protocol", 9, n)
if(n>1) then
n=1
SetData(n, "Local HMI", LW, 0, 1)
else
n=0
SetData(n, "Local HMI", LW, 0, 1)
end if
end macro_command
|