快速入门丨篇四:如何进行运动控制器与触摸屏通讯?

供稿:深圳市正运动技术有限公司

  • 关键词:正运动,运动控制器
  • 摘要:此前,正运动技术给大家讲了,运动控制器的“固件升级”、“ZBasic程序开发”以及“ZPLC程序开发”,今天我们来学习一下运动控制器与触摸屏通讯。

此前,正运动技术给大家讲了,运动控制器的“固件升级”、“ZBasic程序开发”以及“ZPLC程序开发”,今天我们来学习一下运动控制器与触摸屏通讯。


话不多说,直接上视频干货:



正运动技术运动控制器与触摸屏通讯讲义

一、控制器与触摸屏的通讯简介

1.控制器支持的触摸屏

只要支持MODBUS通讯协议的触摸屏都可以与正运动控制器连接使用。控制器使用MODBUS协议与触摸屏通讯时,此时需要将数据放在MODBUS寄存器内进行传递。


2.控制器与触摸屏modbus寄存器地址关系

控制器的MODBUS地址与其他厂家的触摸屏地址映射关系有所不同。

⊙控制器的MODBUS地址从0开始,在与威纶触摸屏通讯时,地址都是从0开始,所以是一一对应。

控制器MODBUS_BIT(0)对应威纶触摸屏 MODBUS_0X_0,布尔型。

控制器MODBUS_REG(0)对应威纶触摸屏 MODBUS_4X_0,字寄存器。

⊙在与昆仑通态触摸屏通讯时,昆仑通态地址从1开始,控制器地址从0开始,所以触摸屏地址加1。    

  控制器MODBUS_BIT(0) 对应昆仑通态触摸屏 MODBUS_0x_1,布尔型。

  控制器MODBUS_REG(0) 对应昆仑通态触摸屏 MODBUS_4x_1,字寄存器 。

⊙控制器端程序可使用ZDevelop软件支持的Basic语言或PLC梯形图编程。

  Basic语言中MODBUS_BIT(0)~ 对应PLC梯形图的M0~。

  Basic语言中MODBUS_REG(0)~ 对应PLC梯形图的D0~。


3.控制器MODBUS寄存器

MODBUS通讯的数据使用MODBUS寄存器存储,控制器的MODBUS寄存器符合MODBUS标准通讯协议,分为位寄存器和字寄存器两类。

位寄存器:MODBUS_BIT,触摸屏一般称为MODBUS_0X,布尔型。

字寄存器:包含MODBUS_REG(16位整形)、MODBUS_LONG(32位整形)、MODBUS_IEEE(32位浮点形)、MODBUS_STRING(8位字节型),触摸屏一般叫MODBUS_4X。


image.png


控制器中MODBUS字寄存器都占用同一片系统变量空间,其中一个LONG占用两个REG地址,一个IEEE也占用两个REG地址,使用时要注意错开字寄存器编号地址。


image.png


⊙MODBUS_LONG(0)占用MODBUS_REG(0)与MODBUS_REG(1)两个REG地址。

⊙MODBUS_LONG(1)占用MODBUS_REG(1)与MODBUS_REG(2)两个REG地址。

⊙MODBUS_IEEE(0)占用MODBUS_REG(0)与MODBUS_REG(1)两个REG地址。

⊙MODBUS_IEEE(1)占用MODBUS_REG(1)与MODBUS_REG(2)两个REG地址。

所以要注意MODBUS_REG、MODBUS_LONG、MODBUS_IEEE地址在用户应用程序中不能重叠。


控制器的MODBUS存储空间安排如下:


image.png


二、触摸屏与控制器的连接方式

可选串口连接或网口连接。

1.网口连接

控制器出厂默认IP地址为192.168.0.11,IP地址可在软件“控制器状态”窗口查看。使用IP_ADDRESS指令修改IP地址或在修改IP地址窗口修改,修改一次永久生效。控制器至少包含2个网口通道,网口的端口号为502,支持触摸屏的MODBUS-TCP协议连接。


image.png


网口通道数查看

不同型号控制器支持的串口通道数和网口通道数不同。使用在线命令栏发送“?*port”查看通道数,通道数确定了控制器能同时连接的设备个数。


image.png


在线命令栏发送“?*port_status”查看通讯端口是否已被使用。


image.png


当前网口通道协议查看

使用PROTOCOL 指令返回当前通道的通讯协议,根据返回值判断。


image.png

image.png


2.串口连接

串口通常可选RS232串口或RS485串口,串口默认参数为:波特率38400,数据位8,停止位1,校验位无,采用SETCOM指令配置串口参数。控制器重新上电后,SETCOM参数会还原成默认值,所以请在程序开头写SETCOM设置。控制器的所有串口的MODBUS协议站号ADDRESS为 1- 127,缺省=1。


image.png


串口MODBUS主从端选择

SETCOM指令除了可以配置串口的通讯基本参数外,还可以选择配置通讯协议,设置控制器为主端设备还是从端设备,还可以开启自定义通讯模式(即mode=0无协议模式)。

语法:SETCOM (baudrate,databits,stopbits,parity,port[,mode] [,variable] [,timeout])      


image.png


mode参数选择协议:与触摸屏通讯时,mode参数选择协议:4

Port0:setcom(9600,8,1,0,0,4,2,1000)

Port1:setcom(9600,8,1,0,1,4,2,1000)


串口掉电保持配置

SETCOM指令可选择寄存器,默认为MODBUS寄存器,可配置是否使用掉电保持寄存器存储数据。

 variable参数选择寄存器:控制器出厂默认选择2,此时系统MODBUS寄存器与VR为两片独立区间。


image.png


variable参数选择示例:

Port0:setcom(9600,8,1,0,0,4,2,1000)


三、控制器连接触摸屏使用

使用的一般流程:

控制器端的程序使用ZDevelop软件编写完成下载到控制器内。

触摸屏端的程序使用对应的编程软件编写完成后下载到触摸屏保存。

程序下载完成之后,选择串口或网口连接触摸屏与控制器脱机运行。


四、控制器和威纶屏通讯实例

以控制器和威纶屏通讯为例展开触摸屏的使用说明。

第一步:控制器端的程序使用ZDevelop软件编写完成下载到控制器内。

第二步:下载触摸屏程序。威纶触摸屏端的程序使用EasyBuilder编程软件编写,程序编程完成后,打开“系统参数设置”窗口,如下图。


image.png


1)添加要与触摸屏连接的设备

设备列表里会显示本机触摸屏和本机设备,若有本机设备双击该行,若没有本机设备,点击“新建设备/服务器...”,弹出设备属性窗口。

2)设置设备属性

选择设备类型,先选MODBUS IDA通讯协议,再根据触摸屏与控制器的实际连接方式选择。

串口通讯和网口通讯所选的设备类型不同,详见后续说明。


image.png


若采用串口连接:

⊙设备类型:选择模式MODBUS RTU(Zero-based Addressing)

⊙接口类型:选择串口类型(RS485或RS232)

⊙COM:通讯端口设置匹配的波特率等参数

此时参数必须与连接到控制器的端口参数一致,设置完成确认关闭系统参数设置窗口。


image.png


若采用网口连接:

⊙设备类型:选择模式MODBUS TCP/IP(Zero-based Addressing)。

⊙接口类型自动改为以太网

⊙IP:填入当前要连接的控制器的IP地址

设置完成确认关闭系统参数设置窗口。


image.png


3)系统参数设置完成后,编译写好的组态程序,将触摸屏连接到PC,待程序下载到触摸屏后断开连接。

第三步:连接触摸屏与控制器,此时触摸屏与控制器就可以相互通信了。

若没有控制器或触摸屏,可采用仿真器仿真,ZDevelop程序下载到仿真器内,EasyBuilder软件的系统参数设置时选择设备类型为MODBUS IDA—MODBUS TCP/IP(Zero-based Addressing),IP地址填入仿真器IP:127.0.0.1,选择“在线模拟”即可连接控制器程序与组态程序进行仿真。


五、通讯例程

1.触摸屏端示例程序

威纶组态程序如下:


image.png


2.控制器端示例程序(basic示例程序)

控制器程序分为五个模块:

1)初始化模块:轴参数设置,变量定义,按键复位。

'**********初始化模块*********

ERRSWITCH = 3            '全部信息输出

RAPIDSTOP(2)

WAIT IDLE


BASE(0,1)           '选定 X Y轴

DPOS=0,0

ATYPE=1,1

UNITS = 100,100

SPEED = 100,100

ACCEL = 1000,1000

DECEL = 1000,1000

SRAMP = 100,100


DIM run_state       '运行状态                 

run_state = 0       '0 停止,1 运行,2 回零

MODBUS_REG(0) = run_state  '显示运行状态


DIM radius,length         '半径,长度

radius = 100             '缺省半径大小

length = 300             '缺省长度

FLASH_READ 0,radius,length

MODBUS_IEEE(2) = radius     '显示半径大小

MODBUS_IEEE(4) = length     '显示长度


DIM home_done      '回零完成的标志位  0 未回零,1 已回零

home_done = 0         '上电进入未回零状态


MODBUS_BIT(0) = 0        '启动 按钮复归

MODBUS_BIT(1) = 0        '停止 按钮复归

MODBUS_BIT(4) = 0        '回零 按钮复归

MODBUS_BIT(5) = 0        '保存数据 按钮复归


MODBUS_BIT(1000)=0        'X轴 回零标志为0

MODBUS_BIT(1001)=0        'Y轴 回零标志为0


STOPTASK 2

RUNTASK 2, guidetask      '启动手动运行任务


2)按键扫描模块:按下启动,停止,回零,保存数据触发执行相应程序。

'**********按键扫描模块*********

WHILE 1                     '扫描触摸屏端按钮输入

    IF MODBUS_BIT(0)= 1 THEN       '启动按钮按下

        MODBUS_BIT(0) = 0          '按钮复归  

                

        IF run_state = 0 THEN        '待机停止状态                

            IF home_done = 0 THEN    '未回零时不启动运动

                TRACE "before move need home"                                

            ELSEIF home_done = 1 THEN  '已回零启动任务运行

                TRACE "move start"

                STOPTASK 1          '软件安全,停止任务0

                RUNTASK 1, movetask   '启动运行加工任务1                        

            ENDIF

        ENDIF

                        

    ELSEIF MODBUS_BIT(1) = 1 THEN    '停止按钮按下

        TRACE "move stop"

        MODBUS_BIT(1) = 0             '按钮复归


         RAPIDSTOP(2)                                        

         STOPTASK 1                                                

         RAPIDSTOP(2)                                        

           

        run_state = 0                 '停止标志

        MODBUS_REG(0) = run_state    '显示状态                

    ENDIF   

        

    IF MODBUS_BIT(4) = 1 THEN           '回零按钮按下

        MODBUS_BIT(4) = 0                  '回零复归           

        IF run_state= 0  THEN       

           stoptask 1

           runtask 1,     home_task    '启动回零任务

        ENDIF                

    ENDIF

        

        '''保存数据处理

    IF MODBUS_BIT(5) = 1 THEN      '保存数据 按钮按下

          MODBUS_BIT(5) = 0        '保存数据 按钮复归

                

          print "写入数据到FLASH"                

          radius = MODBUS_IEEE(2)  

          length = MODBUS_IEEE(4) 

          FLASH_WRITE 0,radius,length   '往扇区0写入数据        

    ENDIF                                      

WEND

END


3)加工运动模块:启动按键按下调用执行运动指令。

'**********加工运动模块*********

movetask:              '运行画圆弧+跑道的任务

    run_state =1              '进入运行状态

    MODBUS_REG(0) = run_state


    radius = MODBUS_IEEE(2)      '读取半径

    length = MODBUS_IEEE(4)      '读取长度

        

    TRIGGER

    BASE(0,1)                     '选定 X Y轴

    moveabs(0,0)                                

        

    move(length,0)            '从原点开始走跑道轨迹

    movecirc(0,radius*2,0,radius,0)

    move(-length,0)

    movecirc(0,-radius*2,0,-radius,0)        

    wait idle(0)

        

     run_state = 0                 '进入待机状态

     MODBUS_REG(0) = run_state

END 

4)回零模块:回零按键按下调用执行轴回零。

'**********回零任务*********

home_task:        

     trace "enter home task"


     run_state = 2              '回零标志

     MODBUS_REG(0) = run_state      '显示状态                

        

     trigger 

        

     base(0,1)        

     cancel(2) axis(0)            '先轴0,轴1停止

     cancel(2) axis(1)                                

     wait idle(0)                                        

     wait idle(1)                                        

        

     'datum(3) axis(0)             '实际设备轴0的归零        

     'datum(3) axis(1)             '实际设备轴1的归零

     moveabs(0) axis(0)            '虚拟设备轴0的归零

     moveabs(0) axis(1)            '虚拟设备轴1的归零

                        

     wait idle(0)        

     MODBUS_BIT(1000)=1           '设置轴0已归零的标志

                        

     wait idle(1)                        

     MODBUS_BIT(1001)=1           '设置轴1已归零的标志

        

     home_done = 1        

     trace "home task done"        

        

     run_state = 0                   '回到待机状态

     MODBUS_REG(0) = run_state        

end

5)手动运动模块:手动触发轴正向或负向点动。

'**********手动运动*********

guidetask:

WHILE 1

    IF run_state = 0 THEN              '判断是否处于停止状态

        BASE(0)

        IF MODBUS_BIT(10) = 1 THEN       '左

             MODBUS_BIT(10) = 0

             VMOVE(-1)                        

        ELSEIF MODBUS_BIT(11) = 1 THEN      '右

             MODBUS_BIT(11) = 0

             VMOVE(1)

        ELSEIF MTYPE = 10 OR MTYPE = 11 THEN  '非VMOVE运动

             CANCEL(2)

        ENDIF

        

        BASE(1)

        IF MODBUS_BIT(20) = 1 THEN        '左

             MODBUS_BIT(20) = 0

             VMOVE(-1)

        ELSEIF MODBUS_BIT(21) = 1 THEN      '右

             MODBUS_BIT(21) = 0

             VMOVE(1)

        ELSEIF MTYPE = 10 OR MTYPE = 11 THEN  '非VMOVE运动

             CANCEL(2)

        ENDIF                

    ENDIF        

   delay(100)

WEND

END


A、程序任务分配情况

自动运行任务0:

若为串口连接设置SETCOM参数中的mode与variable

清空运动缓冲,各轴的初始化

自定义变量的初始化与FLASH读取初始化变量

MODBUS_BIT/REG/IEEE相关变量的初始化

启动任务2作为手动任务运行   

循环扫描程序:

     MODBUS_BIT(0)判断启动

           如果已回零,启动任务1自动程序

           如果未回零,提示系统要回零先

     MODBUS_BIT(1)判断停止

           运动急停,停止任务1

     MODBUS_BIT(4)判断回零

           如果未回零,启动任务1回零程序

     MODBUS_BIT(5)判断参数写入


任务1: 自动程序

    选定轴0,轴1

    加工运行

    等待运动空闲

    结束本任务


任务1:回零程序

    选定轴0,轴1

    开始回零

    等待运动空闲

    结束本任务


任务2: 手动程序

     不断扫描程序:    

     如果待机状态下

     指定轴0或轴1的手动运动,可选方向         

     等待运动空闲


B、程序资源分配

自定义的MODBUS_BIT资源:

MODBUS_BIT(0)    启动 按钮

MODBUS_BIT(1)    停止 按钮

MODBUS_BIT(4)    回零 按钮

MODBUS_BIT(5)    保存数据 按钮

MODBUS_BIT(10)    X轴负向运动

MODBUS_BIT(11)    X轴正向运动

MODBUS_BIT(20)    Y轴负向运动

MODBUS_BIT(21)    Y轴正向运动

MODBUS_BIT(1000)   X轴 回零标志

MODBUS_BIT(1001)   Y轴 回零标志


自定义的MODBUS_REG/LONG/IEEE资源:

MODBUS_REG(0)    run_state 显示运行状态

MODBUS_IEEE(2)    radius 显示并设置加工半径 

MODBUS_IEEE(4)    length 显示并设置加工长度 

任务资源:

任务0:初始化变量与任务2,主循环

             不断扫描外部变量来运行

任务1:由任务0启动,自动程序用于加工

            由任务0启动,回零程序用于归零

任务2 :由任务0启动,用于手动扫描


用到的全局变量资源:

run_state   运行状态

            0停止,1运行,2回零

            MODBUS_REG(0) 显示

home_done   回零完成的标志位

            0 未回零,1 已回零 

radius    MODBUS_IEEE(2) 加工的半径

length    MODBUS_IEEE(4) 加工的长度


FLASH资源:

扇区0   radius,length

        读写数据


用到的轴资源:

轴0:X轴

轴1:Y轴


VR资源:


中断资源:

C、示波器采样波形

任务1启动,运行自动加工模块,示波器采集的波形如下图:

曲线0(红色):轴0的目标位置DPOS(0)

曲线1(紫色):轴1的目标位置DPOS(1)


image.png


1.png


今天,正运动技术的运动控制器与触摸屏通讯就分享到这里。更多精彩内容,请关注我们的公众号。


本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。


关于正运动技术


正运动技术是一家专注于运动控制技术研发与应用的国家级高新技术企业,主要从事运动控制器、运动控制卡、IO扩展模块、运动显控一体机等系列产品的研发、生产、销售和服务。


公司汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校致力于运动控制技术研究与应用,是国内工控领域发展最快的企业之一,也是国内完整掌握运动控制核心技术和实时工控软件平台技术的企业。


image.png

发布时间:2020年8月25日 11:55  人气:   审核编辑(王静 )
更多内容请访问(深圳市正运动技术有限公司
相关链接

我有需求