news 2026/9/28 1:35:54

AutoShop与ITP仿真联调:PLC和HMI全链路虚拟调试指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AutoShop与ITP仿真联调:PLC和HMI全链路虚拟调试指南

前两年做一个设备改造项目,PLC和触摸屏都要换新,供货周期卡得死,现场又等着设备投产。那段时间我基本是靠汇川AutoShop的仿真功能,加上ITP(InoTouchPad触摸屏组态软件)的模拟运行,把整套程序先在电脑上跑通的:梯形图逻辑、HMI画面、通讯链路,全部虚拟联调。等硬件到位以后直接下装,接线、上电、试机,整个过程没有因为程序逻辑返过工。

这套组合的核心思路不复杂:AutoShop负责模拟PLC侧,ITP负责模拟触摸屏侧,让两个"假设备"在电脑里通过以太网握手,实现控制系统全链路闭环验证。很多人觉得两个软件各玩各的,难点卡在IP怎么设置、变量怎么绑,一旦遇到通讯失败就放弃仿真,直接蹲回电柜前折腾真机。这篇文章把整条链路拆开讲,从IP通信模型到变量绑定细节,再到最常见的故障排查顺序。想验证程序逻辑、给客户做画面演示、或者带新人熟悉项目流程的,都可以照着走一遍。

1. 为什么我坚持先做全链路仿真:省下的不只是蹲在电柜前的时间

1.1 AutoShop的仿真能模拟到哪一步

AutoShop是汇川小型PLC的主力编程软件,常见的H1U、H2U、H3U这些机型都在它的支持范围内,支持梯形图、指令表、结构化文本这些编程方式。它自带的仿真模式不依赖真实PLC,在电脑上直接把编译后的用户程序跑起来。你要清楚它模拟的是CPU的运算逻辑:线圈通断、定时器累积、计数器加计数、寄存器读写,这些都能做。

但仿真不是万能的。它模拟不了外部硬件的真实信号:模拟量模块的实际电流电压输入、串口和以太网口上的真实报文、高速计数器对应的编码器物理脉冲,这些在纯仿真环境里都不存在。所以我养成了一个习惯:凡是开关量、定时器、计数器、数据处理相关的逻辑,尽量全部用仿真验证;凡是通讯协议、模拟量采集、运动控制这类与硬件强相关的部分,会等硬件到手后单独做一个"最小功能测试"来验证通讯和接线,而不是把时间浪费在等设备到货上。

1.2 ITP在整套流程里扮演什么角色

ITP是汇川IT系列触摸屏的组态软件,用来设计画面、配置控件和变量。放在这套流程里,ITP负责模拟HMI侧,AutoShop负责模拟PLC侧,两者之间通过以太网通讯:AutoShop的仿真模块相当于一个虚拟PLC服务器,ITP的模拟运行相当于触摸屏客户端。ITP向AutoShop发起连接,读写寄存器。

举个例子,你在电脑上点击ITP画面里的启动按钮,虚拟PLC里的M0就会置位,梯形图逻辑接着动作,输出Y0变为ON,画面上的指示灯也跟着亮了。这个链路完整还原了现场"人按触摸屏→PLC执行逻辑→输出反馈回画面"的过程。这就意味着,不用接一根线,就能先把人机交互和程序逻辑整体验证一遍。

1.3 这套组合真正带来的价值

说直接点,它有四个实打实的价值。

第一是开发期验证。程序逻辑有没有问题,在没有硬件时就能暴露。我自己就因为在仿真时发现互锁逻辑写反,避免了一次现场事故。如果直接下载到设备上,两个输出会同时导通,轻则设备动作异常,重则损坏机构。

第二是方案演示。给客户或领导看项目方案时,直接打开仿真工程,画面操作一遍,比任何PPT都有说服力。

第三是新人培训。新同事上手,不会一上来就接触真机。一台电脑装好两个软件,就可以完整走一遍编程、组态、通讯联调的流程,学习成本低,也不怕把设备搞坏。

第四是效率。柜子还没到、电气还没接线的时候,程序已经能跑了,设备一到就是"下装、接线、上电、试机"四步曲,现场调试周期大幅缩短。

2. 仿真联调的第一步:把ITP和AutoShop之间的IP通信模型想清楚

2.1 虚拟设备之间的"网络通路"长什么样

很多第一次做联调的同事,最容易把"仿真"理解成"单独模拟":AutoShop点一个仿真启动,ITP点一个模拟运行,两个窗口各自干各自的。其实真正的联调是让两个虚拟设备彼此找到对方,这中间要走一条虚拟以太网通路。

AutoShop启动仿真以后,电脑上会挂起一个虚拟PLC服务,监听某个端口等待连接。ITP模拟运行时,相当于一个虚拟触摸屏,按配置的目标IP去连接那个服务。所以核心问题只有一个:ITP配置里填的IP必须和AutoShop仿真时PLC所在的IP一致,端口也要对应。就这么简单,但很多人就是栽在这。

你需要注意一点:不同版本的AutoShop显示虚拟PLC通讯信息的方式不一样。有些版本在仿真窗口或状态栏直接显示一个IP地址;有些版本直接使用本机网卡配置的IP作为虚拟PLC地址;还有的版本需要在仿真设置里手动指定。启动仿真以后,先看清楚自己的软件属于哪种情况,记下那个IP,再往下配。

2.2 本机静态IP配置的两种场景

分清楚场景,你是纯仿真环境联调,还是要和现场真实设备混用。

纯仿真环境:建议给本机网卡配一个固定IP,子网掩码255.255.255.0。IP段选192.168.1.x这种经典网段,x取一个不容易冲突的数值,比如10。网关可以不填,因为只有本机内部通讯。但Win10之后有一个让人抓狂的设定:只填IP和掩码、不填网关,点确定的时候系统会报错,认为配置不完整。我的解决办法很土但有效:临时填一个同网段的网关地址,比如192.168.1.1。如果这台电脑之后还要正常上网,记得改回原来配置,所以建议用专用的本地连接做仿真,别和日常上网的网卡混用。

真实设备混用场景:如果等一下要连真实的PLC和触摸屏,就把电脑IP直接设置成和它们同一个网段。比如PLC是192.168.1.88,触摸屏是192.168.1.66,电脑就设192.168.1.10。这样仿真联调和真实联调之间的切换成本最低,IP不用反复改。

2.3 防火墙是仿真联调中最隐蔽的"拦路虎"

Windows防火墙默认会拦截入站连接,ITP连AutoShop时经常出现"怎么都连不上"的情况。最直接的检查办法:启动AutoShop仿真和ITP模拟运行的时候,注意看Windows有没有弹出"是否允许应用访问网络"的提示。如果有,勾选专用网络后点允许。

如果没弹窗但连不上,临时把防火墙关掉测试一下。确认问题出在防火墙后,再把两个软件加入白名单。不建议长期关闭防火墙,工控电脑的安全还是要重视。

3. AutoShop侧先跑起来:写一个最小的电机启停逻辑

3.1 新建工程、写逻辑、启动仿真

打开AutoShop,新建工程,选好PLC机型。我这里用H3U举例,流程适用于大部分H系列。梯形图里写一个带自锁和自动停机的启保停逻辑:

LD M0(启动按钮) OR Y0(自保持) ANI M1(停止按钮) ANI T0(定时到自动断) OUT Y0(输出到电机接触器) LD Y0(运行状态下) OUT T0 K100(计时,K100为设定值,具体时长看该机型定时器时基) MOV T0 D10(把定时器当前值送到D10,供HMI显示)

编译通过后,在工具栏或"调试"菜单里找到仿真启动入口。不同版本菜单位置有差异,有的工具栏上直接有模拟运行图标。点下去以后,AutoShop进入仿真状态,梯形图进入在线监视模式。屏幕最下方状态栏或在线监视窗口里,会显示当前仿真连接信息,包括虚拟PLC的IP地址和服务端口。把这组信息记下来,这就是后面ITP要去连接的目标。

3.2 用状态监视表模拟现场按钮

状态监视表是AutoShop仿真时最常用的工具。它可以添加M、Y、D、T各类寄存器,双击值直接修改。比如启动按钮M0,现实中要接一个常开按钮才能触发,但仿真里你直接在监视表里把M0改为ON,等效于按下了按钮。

演示一下:在监视表添加M0、M1、Y0、T0、D10。把M0改为ON,梯形图里Y0变ON,T0开始累积,D10跟着变化,最终T0计时到,Y0断开,D10停在设定值。这一整套流程模拟的就是"按下启动、电机运行、运行一段时间自动停止"的现场过程。逻辑对不对、定时时长合不合适,此刻就能判断,不需要任何硬件。

3.3 把HMI用到的地址规划成一张表

在给ITP绑定变量之前,强烈建议先把HMI会用到的地址梳理成一张分配表。这不是形式主义,是后面ITP配置变量的依据。先用上面这个例子:

用途地址类型说明
启动按钮M0位HMI写入,模拟按下
停止按钮M1位HMI写入,模拟按下
运行输出Y0位HMI只读,显示电机状态
运行计时D10字HMI只读,显示运行时间
故障代码D20字HMI只读,备用

把这张表放进项目文件夹,和程序、工程文件放在一起。ITP里建变量时直接照表填,基本不会出地址错误。

4. ITP侧通讯配置:把虚拟触摸屏接到虚拟PLC上

4.1 新建工程与触摸屏型号选择

打开ITP,新建工程,选择目标触摸屏型号。手上没有触摸屏实物时,建议尽量选和项目实际一致或接近的型号。不同尺寸的屏幕分辨率影响画面布局,但不影响通讯变量配置逻辑。如果只是验证逻辑,选一款常用型号即可,后续随时能改。

ITP界面一般分几个区域,左侧是工程管理器或工程树,中间是画面编辑区。在工程树里找到设备或通讯相关节点,双击进入通讯设置。

4.2 通讯节点配置的关键项

在通讯配置窗口里,通常需要新增一个PLC连接,然后配置以下几项:

  • 驱动或品牌:选择汇川,或通用的Modbus TCP驱动
  • PLC类型:选择与AutoShop工程一致的PLC系列
  • 通讯方式:以太网或TCP/IP
  • 目标IP:填AutoShop仿真时显示的虚拟PLC地址
  • 端口:保持默认,或与AutoShop仿真提示的端口一致
  • 超时时间和重试次数:保持默认,除非有断线问题

填完这些,ITP才知道去连接谁。这一步是联调失败的重灾区,尤其是IP地址。我见过有人把本机网卡的IP地址填进去,结果AutoShop虚拟PLC的IP跟它根本不是一回事,自然连不上。

提示:AutoShop仿真显示的IP是"目标",ITP里必须填它;本机网卡IP是"源地址",只需要和虚拟IP在同一网段。这两个概念混掉,是第一天做联调最容易犯的错。

4.3 用最小画面验证通讯链路

在ITP里新建画面,放四个控件:一个"置位"位按钮,地址M0,模拟启动;一个"复位"位按钮,地址M1,模拟停止;一个指示灯,地址Y0;一个数值显示,地址D10,显示格式设为整数。

点击ITP的在线模拟或模拟运行按钮,进入画面模拟状态。正常情况下模拟器能连上AutoShop的虚拟PLC。做两个方向验证:

  1. 在AutoShop监视表里强制M0为ON,ITP画面里Y0指示灯应变绿,D10数值开始增加。
  2. 在ITP画面里点击M0按钮,AutoShop监视表里M0变ON,梯形图中Y0在自锁逻辑下也变ON。

这两个方向都通,证明PLC程序、触摸屏画面、IP通讯三个环节全部正常,剩下就是铺量,加更多画面和控件。

5. 变量绑定的实用技巧:别让地址成为后期修改的枷锁

5.1 先读透地址区的基本规则

H系列的寄存器大致分几块:M区是内部位寄存器,Y和X是输出和输入点,D区是数据寄存器,T和C对应定时器和计数器。ITP的变量类型也围绕位和字两大类,但不同版本对地址写法的要求有差异。

有些老协议驱动可能要求把M0、D10换算成Modbus风格的绝对地址。遇到这种情况,不用死记地址码,在ITP变量界面或手册里找到驱动对应的功能码表,再把你用到的地址按规则换算即可。如果选同品牌驱动,通常已经封装好了地址映射,直接填M0、D10就行。

5.2 数据类型匹配:数值显示对不上的根源

这是几乎所有做HMI联调的人都要踩一遍的坑。AutoShop的D寄存器是16位的,默认按有符号整数处理。假如PLC里往D10写入的是一个0到60000之间的无符号值,ITP数值控件默认按16位有符号解析,显示就成了负数,看起来很离谱。

解决办法是在ITP控件的属性或变量定义里找到数据类型选项,改为无符号16位。决定用什么类型的依据,不取决于希望显示成什么,而是PLC程序写入该地址的数据范围。这句话要记住:数据范围可能超过32767的无符号值,就按无符号处理。

另一个高频坑是32位数据。运行时间、累计产量这类数值在D区占两个连续地址,比如D10和D11。ITP绑定这个值时,地址仍填D10,数据类型选双字32位,注意高低字顺序。汇川的PLC和ITP一般遵循小端序,低16位在D10,高16位在D11,保持默认即可。如果数值变成一个巨大错误值,很可能是高低字被交换,去检查通讯驱动里是否有多字节顺序选项。

5.3 位和字之间别硬转,在PLC里留好映射区

有些场景需要把位状态组合成字,比如把M区的状态位打包,在HMI上用数值控件显示成状态码。最稳妥的做法不是在ITP里做复杂的位拼接,而是在PLC程序里用BMOV或MOV指令把M区的位组合搬到D区,ITP直接读D区。

原因是HMI端的位运算能力很弱,梯形图干这个最合适,而且仿真时还能直接在AutoShop监视表里看到转换结果对不对。这个原则能帮你少掉很多头发。

5.4 从"直接填地址"升级到"变量表管理"

ITP支持设备变量表。建议先定义变量,再让画面控件引用变量,而不是在每个控件里直接写死地址。

举个操作例子:在变量表里新建一个条目,变量名填RunStatus,类型选位,地址Y0。画面里的指示灯控件,在变量属性里下拉选择RunStatus。这样做的价值体现在后期维护:程序把运行状态从Y0挪到Y5,只需要改变量表里的一处,画面所有引用自动生效。直接在每个控件里写地址,画面一多就要逐个检查,非常痛苦。

变量命名也值得多说一句。用英文或拼音缩写加用途,比V001这种不明所以的编号好太多。中文名在ITP里通常支持,但跨系统流传时有编码问题,所以我习惯用RunStatus、FaultCode这种格式。

6. 联调常见故障排查:把这几个点按顺序查一遍

6.1 ITP显示连接失败,该去哪看

遇到ITP模拟器报通讯失败,不要急着反复点重试,按顺序排查:

  1. 确认AutoShop的仿真还在运行。编译报错导致退出或软件崩溃时,虚拟PLC进程消失,ITP自然连不上。
  2. 确认AutoShop仿真显示的虚拟IP,然后和ITP通讯配置里的目标IP逐字符比对。
  3. 确认本机网卡IP与虚拟IP在同一网段。比如虚拟IP是192.168.1.88,本机是192.168.1.10,掩码255.255.255.0,没问题;本机如果是192.168.0.10,就不行。
  4. 确认端口一致。AutoShop提示的端口和ITP配置的端口要相同,大部分情况保持默认即可,但改过就要核对。
  5. 确认防火墙放行,或者临时关闭防火墙测试。
  6. 确认没有其他程序占用该端口。个别编程软件或仿真工具会监听相同端口,导致连接被抢。

按这个顺序排查,90%的连接失败问题都能解决。剩下10%大概率是软件版本兼容问题,换到兼容版本一般就好。

6.2 画面能连上但数值不动,问题出在绑定

连上了但数据不刷新,是变量绑定阶段最常见的问题。按这个思路查:

先看AutoShop监视表里目标地址有没有变化。数值没变化,说明PLC侧就没写这个地址。可能程序里根本没写,或者值存在功能块的局部变量里没传回全局D区。去程序里把传送指令加上。

再看ITP控件是否绑定了正确变量。用变量表方式建立控件的,改过变量地址后没重新编译,控件还在引用旧变量,这种情况特别隐蔽。每次修改变量表,重新编译ITP工程再运行模拟,避免用到过期缓存。

最后看数据类型。数值疯狂跳变或出现负数,大概率是符号位或位数不匹配。回变量属性核对数据范围,改成无符号或32位。

6.3 仿真系统"时好时坏",往往是IP配置漂移

纯仿真环境最烦人的是今天能连上、明天连不上。常见原因有两个。

一是AutoShop每次启动仿真的虚拟IP不固定,取决于版本和网络环境。下次启动换了一个IP,ITP配置里还写着昨天的IP。解决办法:每次启动仿真后先看IP,有变化就同步改ITP配置。

二是本机网卡在DHCP和静态IP之间漂移。比如早上插着公司网线自动获取IP,下午拔网线做仿真,Windows给网卡分配了一个169.254开头的地址,和虚拟PLC不同网段,连接必断。解决方法是给网卡固定一个专用仿真IP,或者建一个虚拟网卡,始终固定仿真网段。

我实际项目中会做一张《联调IP记录表》,把本机IP、AutoShop虚拟IP、ITP目标IP、端口、日期都记下来。每次联调开始前花两分钟核对,就能避免很多"莫名连不上"的排查时间。这个习惯听起来基础,但特别有效。

写到这里,AutoShop和ITP全链路仿真的完整流程已经串下来了。整体思路一句话总结:AutoShop出虚拟PLC,ITP出虚拟触摸屏,IP保证能握手,变量绑定保证数据不错位。

我个人的惯常做法是,每接一个新项目,首次联调前先把《联调IP记录表》放进项目目录,然后照着最小示例先跑通一个按钮、一个灯、一个数值,确认链路没问题后再把画面铺开。如果以后你也在用汇川这套工具做离线联调,不妨试试这个流程,能省下不少蹲在电柜前的冤枉时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 1:35:15

RK3588开发板环境搭建指南:镜像烧写、Ubuntu扩容与xrdp远程桌面

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/28 1:35:15

国产DSP替代TI选型实战:进芯、昊芯、魂芯三方案对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/28 1:35:05

工业遥控器定制周期全流程从需求澄清到量产交付关键时间拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/28 1:35:05

Verilog按键消抖实战:计数器、滑动窗口与边沿检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/28 1:34:27

STM32工程心法:时钟树、调试接口与HAL库的实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华