回到目录 回到末尾
Modbus采用主从式通信,日常使用较多的是Modbus RTU和Modbus TCP/IP两种协议。Modbus RTU是使用串口通讯最广泛的协议之一,市面上有大量的Modbus协议调试工具,本文推荐使用Modscan32和Modsim32,其中,Modscan32作为Modbus主站(模拟上位机软件),Modsim32用来模拟Modbus从站,也就是模拟工业现场的Modbus设备。
回到目录 回到末尾
需要特别注意的是,Modsim32每个文件仅能同时模拟一个寄存器范围,例如,要同时模拟一个Modbus设备的01线圈和03保持寄存器,需要新建两个设备并进行配置。
初次打开ModSim32需要新建一个虚拟设备
点击文件(File)->新建(new)
Modsim32支持同时新建多台模拟设备,新建完成后,输入:
注意:
从站的地址(Device id):这里最低只能配置为1,对应Modbus指令里的0地址)
寄存器起始地址(Address):读取的点的位置,modscan32读取的点位要加1位,即如果点的实际位置为2时,在地址栏输入3.)
寄存器数量(Length):即读取的点的个数。某些设备的点数是有限的,如一块表一共就10个点,在ping这块表时,输入的数据地址长度请勿超过10个。)
MODBUS Point Type:可以配置使用的Modbus点位类型。(注意:修改不同的点位类型时,对应地址前面会带有不同的前缀数据,这个并不影响Modbus指令里的起始地址,只是用于PLC的地址分段)
01:COIL STATUS:继电器状态 - 线圈(可读可写)
02:INPUT STATUS:输入状态 - 线圈(只读)
03:HOLDING REGISTER:保持寄存器(可读可写) - 一般选用这个选项
04:INPUT REGISTER:输入寄存器(只读)
新建完成后,点击文件(File) -> 保存(save)
保存文件到对应位置。
回到目录 回到末尾
modsim支持打开一起按配置好的sim文件,不用每次都去重新配置。
点击文件(File)->打开(open),选择对应的modsim文件:
回到目录 回到末尾
配置完成后,点击连接设置(Connect)连接串口:
点击:连接设置(Connect)-> modbus/tcp
设置端口号,Modbus/TCP的默认端口号为1024。实际根据连接设备的IP和端口号来设置。
点击:连接设置(Connect)-> 端口号(COM 号)
协议选择:根据通信设备选择使用RTU模式或ASCII模式,工业应用的话一般使用RTU模式,很少使用ASCII模式。另外还有"Daniel/enron/OMNI"(一种基于标准的扩展形式)的RTU和ASCII模式可以选。
参数配置:
在配置窗口中配置好端口号、波特率、数据位、校验位、停止位,一般是9600波特率(9600 Baud),8个数据位(8 Data bits),无校验位(None Parity),1个停止位(1 Stop Bit)。当然这个是要根据实际通信的设备进行匹配设置。
设置完点确认
即可完成设置进行连接。
(1)数据区***上方会显示通讯状态,如下图所示,说明连接失败
(2)数据区上方无文字提示,说明连接成功。
【点击查看更多连接状态】
当然,ModSim32也支持通过物理串口模拟Modbus设备。
回到目录 回到末尾
ModSim32支持设置寄存器值,可以通过固定值、随机值和递增、递减四种方式设置寄存器值。双击某个寄存器,可以设置其对应值:
(1)如果要设置固定值,只需要修改Value值并选择Update按钮进行更新;
(2)如果要进行更高级的模拟,需要点击Auto Simulation,选择Random(随机)或者Increment(递增)Decrement(递减)方式,并且配置最大最小值。
双击数据项,设置属性:
英文版为:
回到目录 回到末尾
回到目录 回到末尾
【工具使用】Modscan32软件使用详解
Modscan32的使用与Modsim32非常类似。
注意:
从站的地址(Device id):这里最低只能配置为1,对应Modbus指令里的0地址)
寄存器起始地址(Address):读取的点的位置,modscan32读取的点位要加1位,即如果点的实际位置为2时,在地址栏输入3。一般建议先读少量寄存器,确认通讯上了之后再批量读多个寄存器数据。
寄存器数量(Length):即读取的点的个数。某些设备的点数是有限的,如一块表一共就10个点,在ping这块表时,输入的数据地址长度请勿超过10个。)
MODBUS Point Type:可以配置使用的Modbus点位类型。(注意:修改不同的点位类型时,对应地址前面会带有不同的前缀数据,这个并不影响Modbus指令里的起始地址,只是用于PLC的地址分段)
01:COIL STATUS:继电器状态 - 线圈(可读可写)
02:INPUT STATUS:输入状态 - 线圈(只读)
03:HOLDING REGISTER:保持寄存器(可读可写) - 一般选用这个选项
04:INPUT REGISTER:输入寄存器(只读)
文件(File) -> 保存(save)
或点击 保存图标,自定义文件名,选择合适的位置存储。回到目录 回到末尾
点击:连接设置(Connect)
当通讯接口是串口时需要确定现在具体使用的是PC机的哪个串口。
点击:连接设置(Connect)
3.点击“协议选择(rotecol selection)”,根据通信的从机设备选择使用RTU模式或ASCII模式,工业应用的话一般使用RTU模式,很少使用ASCII模式。另外还有"Daniel/enron/OMNI"(一种基于标准的扩展形式)的RTU和ASCII模式可以选。一定要与从机设备的协议类型保持一致。
3. 再设置下超时时间和帧间隔时间(实际就是每个窗口之间的发送间隔),超时时间可以按默认1s就行,Modbus国标规定是200ms到1s。帧间隔时间按默认20ms设置即可。
4. 另外勾选""可选择单个写入线圈/寄存器时,要使用15/16指令(支持批量写入)还是05/06指令(只支持单个写入)。
5.硬件流控制如果没有使用的话,按默认设置即可。设置完点确认即可完成设置进行连接。
回到目录 回到末尾
ModScan32支持设置寄存器:
双击某个寄存器,可以设置其信息:
双击某个寄存器,修改“值”数据,点击“更新”,从机数据也更新:
从机数据也会更新:
可以在窗口里直接配置,也可以点击"配置"->“数据定义”,在弹窗中进行配置。
扫描速率:配置当前窗口报文发送的周期间隔。
回到目录 回到末尾
点击"配置"->"显示选项"->"二进制"/"十进制"……,选择对应的数据制式(数据流里的数据也会有变化)。
点击"配置"->“显示选项”->“显示数据流”,可以切换查看当前的收发数据,其中白底的是软件发送的,黑底是从设备回复的。
串口是基于硬件的物理设备,一般用于计算机和现场控制器、控制器与控制器、控制器与仪表等设备之间的通讯和数据交换,但工业设备一般都安装在工业现场,需要到现场才可以进行调试。
上位机调试串口时,有时是没有硬件设备的,只能虚拟串口,为了验证程序的正确性,在进行实际调试前可以使用虚拟串口工具进行一些模拟和测试。
vspd 一次虚拟2个串口,一个读,一个发,然后连接起来实现自发自收调试,让你的程序读一个串口,另外一个串口你就用来串口调试工具。
下载VSPD:VSPD6.9
解压缩后,右键单击VSPD.exe,选择以管理员身份运行,选择默认语言English(暂无中文版),选择安装路径(需要记住安装路径,后续步骤要用)。
安装完成后,复制解压缩目录/Cracked
下的vspdctl.dll
文件,并粘贴到前面的安装文件夹下,覆盖目标文件即可完成安装。
回到目录 回到末尾
VSPD可以成对创建相互连通的虚拟串口。两个串口分别用来模拟相互连接的串口设备(例如,一个串口模拟主站,另一个模拟从站)。
这里以COM3和COM4为一对虚拟串口为例:
回到目录 回到末尾
虚拟串口(virtual ports下,设备的物理串口列举在Physical ports下),在Windows的设备管理器中也能看到Virtual ports虚拟串口。
如果要删除虚拟窗口,点击左侧虚拟串口链表里的串口,右侧会出现delete选项,点击delete pair进行删除:
注意:在卸载VSPD前,务必通过Delete ports删除虚拟串口。
回到目录 回到末尾
本例在同一台电脑中运行、模拟采用了Modbus协议的设备的数据收发过程。本例以COM3和COM4为一对虚拟串口为例,将ModSim32创建的虚拟设备连接到COM4,步骤如下:
点击进入查看如何通过VSPD创建的成对串口COM3和COM4
需要特别注意的是,Modsim32每个文件仅能同时模拟一个寄存器范围,例如,要同时模拟一个Modbus设备的01线圈和03保持寄存器,需要新建两个设备并进行配置。
连接完成后,Modscan32就可以与前节的Modsim32创建的modbus设备进行通讯了。
如果要修改某个线圈或者寄存器地址,只要双击该地址并进行设置即可,在Modscan中修改后,在Modsim中可以看到修改后的参数值。
退出Modscan32前,需要先断开连接。
回到目录 回到末尾
在实际开发、应用中,如果没有采集到数据,需要判断是哪里出的问题,可以通过以下步骤进行排查:
telnet IP地址 端口号
回到目录 回到末尾