精华内容
下载资源
问答
  • 前言本节,我们开始学习连接Tlink平台,通过TCP协议将数据传输到Tlink平台,同时通过Tlink平台下发命令远程控制设备,本节目表示通过网络助手和TLink平台进行数据调试。一、基础知识1.Tlink平台简介Tlink物联网平台...

    96a5b9593c4fea2126fb448765df71f1.png

    前言

    本节,我们开始学习连接Tlink平台,通过TCP协议将数据传输到Tlink平台,同时通过Tlink平台下发命令远程控制设备,本节目表示通过网络助手和TLink平台进行数据调试。

    一、基础知识

    1.Tlink平台简介

    Tlink物联网平台是一个免费开放的设备连接平台,主要应用在工业领域,接入传感器种类广泛,基本包含了工业应用的所有场景,Tlink是一款链接平台,实现了百万级节点实时连接,集成了TCP、HTTP、MB RTU、MB TCP、MQTT、UDP、TP500、NB-IOT、CoAP等物联网协议。

    二、云端创建设备

    Tlink地址:https://www.tlink.io/ ,注册后进入控制台。

    1.添加设备

    点击添加设备

    45e2bb4741b881a96973306d78c2bcc2.png

    输入设备名称,并选择连接协议为TCP

    27cb251b79d8b503cee3cd0707891e5d.png

    点击追加,创建传感器,我这里选择DHT11温湿度传感器和一个开关

    8a9a3f8c3422571fc28100c5f39b5c74.png

    信息填写完成后,点击下方创建设备按钮

    4efe2fdce5a407534cff29bdb98c4766.png

    2.修改协议

    点击设置连接,进入设备连接信息配置页面

    da70f37501279917b809b23abd21cce4.png

    自定义协议类型,选择如下数据传输协议

    f08783702f4b106a4b509f6cf040c5eb.png

    三、网络助手连接

    1.通信流程

    首先连接http://tcp.tlink.io:8647,然后发送设备序列号给平台,如果平台不断开连接,或者返回错误信息,那么鉴权成功,接着定期发送心跳数据("Q")给平台,平台回复A说明心跳正常。

    2.获取设备序列号

    device1的设备序列号为:UVKY765HR848JGNM

    a29b2b9a46574390104d522896a8f65d.png

    3.使用网络助手调试

    (1) 打开网络助手

    3025ad7937bee5404b0993d10d878c36.png

    (2) 获取http://tcp.tlink.io的IP地址

    在CMD控制台输入ping http://tcp.tlink.io

    7e77f3132c5d54c6908fb5f9b2dea073.png

    可知IP地址为112.74.142.132。

    (3) 连接tlink平台

    828865aec4fa53fecc93c92ffd063d75.png

    (4) 发送序列号给Tlink

    3dba59b50e5104793202058746ef5159.png

    (5) 发送数据

    da38edb9aa4133b6ccd40abd56ef6d9f.png

    查看后台数据

    b07d5922d8524d48d6c3c39c3c57d696.png

    (6) 维持心跳

    维持心跳,只需要每隔30秒发送Q给平台,平台会返回A。

    9185e23564f7f4bce23404f53427893d.png

    (7) 接收数据

    点击设置设备连接,打开编辑协议页面

    7cec302085a6d3a79af372184b5708a5.png

    右下角窗口可进行数据调试

    7b693ca1d78c99f8861e749fd9132ad0.png

    点击右下角图标,然后点击下发命令

    0cf8b747b67f81ff5ee5586874665acd.png

    网络助手信息如下:

    3fdf08a16d2ffce7f863eea228caf53d.png

    网络助手收到了平台下发的#24,0#数据。

    四、结语

    (1)获取资料

    关注公号,回复wemos即可。

    一叶孤沙出品:一沙一世界,一叶一菩提

    展开全文
  • 一、串口调试功能:我们以条码枪为例来演示PLC调试神器的串口调试接收功能。首先将条码枪通过232转USB的方式接到电脑上,如图所示:查看设备管理器“端口”,在调试神器串口调试界面选择COM5,通讯参数9600,8,N,1...
    49a6c3384ae58a33d233c0bc4561eb21.png

    一、串口调试功能:

    我们以条码枪为例来演示PLC调试神器的串口调试接收功能。首先将条码枪通过232转USB的方式接到电脑上,如图所示:

    1c14652732075ef749b8a0fe903372fe.png

    查看设备管理器“端口”,在调试神器串口调试界面选择COM5,通讯参数9600,8,N,1。与条码枪设置一致,然后打开串口。

    39b35b51dbd9045844b29fe93ce6ae0d.png
    ddfb0e5dbbafdaa613db1b2c3583d06c.png

    使用条码枪扫描条码,可以看到扫描的数据显示在调试神器的接收区当中。

    fdb135f709a815175b06a286bf4f7cd5.png
    ffa579d617f0621475b476a71a53cbcd.png

    下面我们用三菱FX3U PLC的232BD来演示串口调试界面的发送功能。连接如下:

    b14948a1da95196a6ff5e6e0b8ccbce2.png

    编写通讯程序:

    9483934f0fa3564080fce442936ee517.png

    打开串口,在数据区选择循环发送(每100毫秒发送一次数据)

    a7d6e5c62302ba6acaba860b29017bd4.png

    监视PLC接收到的数据。

    030f470d37e999754e3582d919ac749b.png

    二、网口(TCP/UDP)调试功能:

    我们使用Q26UDV的内置以太网口socket通讯程序来演示神器的网口调试功能。硬件连接如下所示:

    7399b4a56f43bfee33df71a93c99c6cd.png

    通讯设置(选择1号通讯,通讯方式为Socket,TCP连接方式为主动Active;本机IP地址:192.168.1.12,端口号4098;对方IP地址:192.168.1.4,端口号4097):

    cd37139fbd1dc25c2133785af1d9c59d.png

    通讯程序,包括打开连接、关闭连接、接收数据和发送数据,限于篇幅只截取片段。

    fee92d830f82a83435912bcd0e509f79.png

    调试神器这边,选择TCP协议,选择建立服务器(因为Q系列PLC刚才设置成了active,做客户端来用),IP地址和端口号填写成刚才设置当中的IP地址和端口号(和电脑IP地址要一致),就可以测试TCP协议的发送和接收了:

    e8fc9a32b0d68e668c54b95ac6b0edf3.png

    三、Modbus-RTU调试功能:

    PLC调试神器的Modbus-RTU调试相比传统的Modbus调试工具来说,更加形象直观。不仅包括了报文上的CRC校验计算,更按照功能码的不同将线圈和寄存器的输入输出状态以图表的形式显示在了界面上。除此之外,还支持Modbus从站调试功能。下面我们以两台电脑之间互为Modbus主从站调试功能为例,来详细说明PLC调试神器的Modbus调试方法。

    55dc43886506c90d266c0d1b109847e4.png

    首先我们来配置从站电脑上的调试神器。在界面当中选择“从站”,然后创造一批从站寄存器地址(以寄存器0000-0008,共9个寄存器为例),并填入寄存器当中的数值(地址0000数值为H0012,地址0001数值为H0034,地址0002数值为H0056,地址0003数值为H0078),如图所示:

    f790da8e9aa88fec3a5800f6890f22fa.png

    然后我们配置主站电脑上的调试神器。设定功能码为03(读寄存器),读从站的地址是0000-0003共4个。可以看到下方发送区自动生成了Modbus格式的报文,包含CRC校验。

    549f61d50b13bdeb3eb40e17c7444481.png

    然后点击连续发送,可以看到从站当中的寄存器当中数据被刷新到显示区。

    32248efe63a6324b00f478ee8f4caf22.png

    关于读写线圈,操作也是一样的。

    从站状态:

    08c86091479c583232c1692ac64de320.png

    主站读取到从站的状态:

    c6e8e70e943ee9e9f2eec435a3c8d54d.png

    四、Modbus-TCP调试功能:

    通过前面对Modbus-RTU和TCP/IP调试的介绍,相信大家对于Modbus-TCP的调试方法也大体有所了解了。

    简而言之,如果连接服务器,PLC调试神器就是作为主动方;如果创建服务器,PLC调试神器就是作为接收方,我们先将网络配置好(操作同TCP调试一样),然后设置Modbus的读写地址,就可以和Modbus-RTU的调试界面一样,进行数据的读写监视了。

    从站(服务器)配置:

    5e9e5fc6b78f9a3cddc819619f4dc1ab.png

    创建服务器,写入从站线圈状态:

    5f75ab336d7e8ed48807744eda9ddc38.png

    主站读取操作:

    57715e40ecea48242914ceff548b4490.png

    我们在工程项目调试通讯的时候,如果遇到通讯不上的问题,建议先使用PLC调试神器,分别对PLC、仪表以及从站来进行监控或者发送调试。依靠控制变量的方法,按次序排查PLC的数据、仪表返回的数据以及线路通畅与否。将可能的故障点排除掉之后,剩下的就是真正的故障原因了。

    PLC调试神器 就是让电脑成为一个通讯的站,这个站可以是串口,可以是网口,可以是Modbus主站,也可以是Modbus从站。通过在电脑当中对抽象通讯数据的形象显示,能够使我们更方便地查找到问题,提高工作效率。未来的PLC调试神器还将升级进去CC-Link、CC-Link IE、EtherCAT、Profinet等常用品牌现场总线,更好的造福自动化行业。

    下面我们来了解PLC调试神器的一些附加功能,大家在做项目的时候有时候会用到,非常方便。

    1.虚拟串口工具:

    通过虚拟串口工具,我们可以在一台电脑上虚拟出多对串口来,两两为一组。这样方便在一台电脑当中进行串口数据以及Modbus的调试监控,无需硬件。对于通讯的初学者来说是极好的练习方式。如图所示:

    在虚拟串口工具当中虚拟两对串口,COM1对应COM2:

    3907d188fddd3270ff7fdf1cac2a5a98.png

    然后打开两个串口调试界面,一个选择COM1,另一个选择COM2,分别打开串口。我们就可以在两个串口调试界面之间互相收发数据了。

    COM1发送数据:

    72ec43f19966644e3c5f84434f5d3afb.png

    COM2接收数据:

    d5e7350eb8d34b6a1b9b2656c4293ec9.png

    对于Modbus-RTU,也可以这样来操作,你还怕学不会Modbus吗?

    虚拟主站:

    f659734935ef70ca8867d2efcdf02d0e.png

    虚拟从站:

    2c7a82037683f63f3398d486cafe257c.png

    2.ASCII码转换工具:

    以往我们在编程或者调试ASCII码格式通讯的时候,需要查找ASCII码对应表。有了PLC调试神器,我们可以直接通过转换的方式,方便快捷的得出数据的ASCII码表示,如图所示:

    3c75978d51113f1388e6a47be3cd062b.png

    汉字也是支持的:

    2478fdaf95164dcadce215361368d709.png

    也可以通过查表的方式找到字符对应的ASCII码:

    f8555337f7df7f8e3ec031efdb01a4fa.png

    3.伺服步进的齿轮比计算:

    ffa1eed984d37cff0f35fedc1c48b959.png

    除了通讯调试,PLC调试神器的另外一大亮点是伺服/步进等运动控制的计算功能。我们无需通过公式进行计算,就能快速的根据机械结构和编码器分辨率等参数求出电子齿轮比或者步进细分。是不是很强大呢?

    f85e9c5351495c781fda40382d41cd74.png

    步进电机细分计算:

    b8691c7a30a179f0471e015bd353f6ae.png

    脉冲毫米转换、频率与速度转换:

    9eab6a4d5725b2c0dd571b0d4f63dd75.png

    4.进制转换、位组合字、模拟量比例转换:

    c735342d4b3821090b9c546aed31980a.png

    很多初学者对于位、字节、单字、双字的概念不好理解,因为这个概念比较抽象。PLC调试神器当中包含了进制、位字组合等的转换工具,帮助你更好掌握数据概念!

    进制转换器:

    464eea27b94e79b341299a7c6bd971ae.png

    二进制位组合:

    e0f7f88db6ae0346fcd859333e1f1d2c.png

    位和字的关系,搞不清K4M0、K8Y20的概念?调试神器帮您!

    36f5eb0f4a37771fa9207f393c22a810.png

    模拟量比例转换器:

    ef4dfea0411cfe9301214a38fb323511.png

    工程师们接项目赚外快,不知道如何报价?工程报价器帮您!

    计算报价仅供参考,大家报价的时候根据实际情况来确定哟~

    6419f118165b95f1d684ee02929c8616.png

    升级一:新增串口调试起止符CR/LF功能

    66c88234fc380bd06e3045ae5f2baa64.png

    升级二:Modbus调试窗口背景微调

    bacb8bb7d238241fff6788ce38de353d.png

    升级三:修复了Modbus/TCP调试当中的部分bug

    56841a7c7f28be8d8622db0e115fe32f.png

    升级四:新增IEC浮点数转化功能

    56d83dcd793962c1ff36c9fd95c0509d.png

      好了,关于八方汇PLC调试软件的使用方法和功能介绍就到这里~

    重要的事情说三遍:这款神奇的软件完全免费!完全免费!完全免费!

    有需要的小伙伴们可以直私信发接链接下载!

    展开全文
  • 网上找了很多modbus tcp 服务端的调试助手,感觉这个用起来还算不错,这个是64位操作系统的,从站端。
  • 调试助手modbus tcp

    热门讨论 2013-04-24 18:18:03
    适合工程modbus tcp 测试时使用
  • RS232串口调试助手modbus调试助手,网口tcp,udp调试助手等合集各种小助手,你想要的应有尽有。
  • PLC调试助手modbus tcp/ip 16进制通信,支持数据解析,多种格式数据转换
  • MODBUS TCP通讯调试软件

    2018-01-11 16:48:22
    TCP服务器通讯测试工具服务端和客户端。可选择本机IP地址和远程IP地址及端口,支持自动连接,自动发送数据。本工具可以运行在WINXP/7/CE系统下,如果无法运行,是因为你的电脑没有安装.NET2.0及以上环境。 支持多...
  • { //主动连接服务器 conn, err := net.Dial("tcp", "192.168.1.154:502") if err != nil { fmt.Println("client dial err=", err) return } //defer conn.Close() _, err = conn.Write([]byte{0x00, 0x00, 0x00, 0x...
    package main
    
    import (
       "fmt"
       "net"
       "strings"
    )
    
    const (
       BitNotConsidered ="不考虑的比特位"
       bit01 = "断纤告警"
       bit02 = "高温告警"
       bit03 = "温升告警"
    )
    type TotalStat struct {
       GlobalAlarm string
       //第一个寄存器bit0~bit3的状态
       FirstBitGlobalAlarmStatus string
       SecondBitGlobalAlarmStatus string
       ThirdBitGlobalAlarmStatus string
       ForthBitGlobalAlarmStatus string
    
    
        //第二个寄存器每个比特采集状态
       FirstBitCollectStatus string
       SecondBitCollectStatus string
       ThirdBitCollectStatus string
       ForthBitCollectStatus string
       FifthBitCollectStatus string
       SixthBitCollectStatus string
       SeventhBitCollectStatus string
       EighthBitCollectStatus string
       NinthBitCollectStatus string
       TenthBitCollectStatus string
       EleventhBitCollectStatus string
       TwelfthBitCollectStatus string
       ThirteenthBitCollectStatus string
       FourteenthBitCollectStatus string
       FifteenthBitCollectStatus string
       SixteenthBitCollectStatus string
    
    
       //第五个寄存器每个比特断纤状态
       FirstBitBrokenFiberStatus string
       SecondBitBrokenFiberStatus string
       ThirdBitBrokenFiberStatus string
       ForthBitBrokenFiberStatus string
       FifthBitBrokenFiberStatus string
       SixthBitBrokenFiberStatus string
       SeventhBitBrokenFiberStatus string
       EighthBitBrokenFiberStatus string
       NinthBitBrokenFiberStatus string
       TenthBitBrokenFiberStatus string
       EleventhBitBrokenFiberStatus string
       TwelfthBitBrokenFiberStatus string
       ThirteenthBitBrokenFiberStatus string
       FourteenthBitBrokenFiberStatus string
       FifteenthBitBrokenFiberStatus string
       SixteenthBitBrokenFiberStatus string
    //第六个寄存器断纤告警状态
       FirstBitFiberCutStatus string
       SecondBitFiberCutStatus string
       ThirdBitFiberCutStatus string
       ForthBitFiberCutStatus string
       FifthBitFiberCutStatus string
       SixthBitFiberCutStatus string
       SeventhBitFiberCutStatus string
       EighthBitFiberCutStatus string
       NinthBitFiberCutStatus string
       TenthBitFiberCutStatus string
       EleventhBitFiberCutStatus string
       TwelfthBitFiberCutStatus string
       ThirteenthBitFiberCutStatus string
       FourteenthBitFiberCutStatus string
       FifteenthBitFiberCutStatus string
       SixteenthBitFiberCutStatus string
       //第八个寄存器断纤告警状态
       FirstBitFiberCutAlarmStatus string
       SecondBitFiberCutAlarmStatus string
       ThirdBitFiberCutAlarmStatus string
       ForthBitFiberCutAlarmStatus string
       FifthBitFiberCutAlarmStatus string
       SixthBitFiberCutAlarmStatus string
       SeventhBitFiberCutAlarmStatus string
       EighthBitFiberCutAlarmStatus string
    
       CH16 string
       CH1732 string
    }
    func Str2DEC(s string) (num int) {
       l := len(s)
       for i := l - 1; i >= 0; i-- {
          num += (int(s[l-i-1]) & 0xf) << uint8(i)
    
       }
       return
    }
    
    type DeviceStatus struct{
       RegisterID int
       RegisterName string
       FirstBitStatus string
       SecondBitStatus string
       ThirdBitStatus string
       ForthBitStatus string
       FifthBitStatus string
       SixthBitStatus string
       SeventhBitStatus string
       EighthBitStatus string
       NinthBitStatus string
       TenthBitStatus string
       EleventhBitStatus string
       TwelfthBitStatus string
       ThirteenthBitStatus string
       FourteenthBitStatus string
       FifteenthBitStatus string
       SixteenthBitStatus string
    }
    type DeviceStatusNumber struct{
       RegisterId int
       RegisterName string
       Number int
    }
    var TS TotalStat
    
    func main() {
    
       //主动连接服务器
       conn, err := net.Dial("tcp", "192.168.1.154:502")
       if err != nil {
          fmt.Println("client dial err=", err)
          return
       }
       //defer conn.Close()
       _, err = conn.Write([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x01, 0x00, 0x09}) // + "\n"
       if err != nil {
          fmt.Println("conn.Write err=", err)
       }
       //接收服务器回复的数据
       buf := make([]byte, 2048)
    
       for {
          //n,err2:= conn.Read(buf)
          n, err2 := conn.Read(buf)
          if err2 != nil {
             fmt.Println("服务器read err=", err2)
             return
          }
          st := fmt.Sprintf("%08b", buf[9:n])     //%08b
          st1 := strings.Replace(st, " ", "", -1) //去除字符串所有空格
          runeArr := []rune(st1)                  //runeArr := []rune(inputStr)
    
          //解析数据
          //第一个寄存器
          Binary := string(runeArr[1:17]) //取字符串第1到16个字符
          //字符串转数组并打印显示
          var stringArr [16]string
          for index, value := range Binary {
             stringArr[index] = string(value)
          }
          if stringArr[0] == "1" {
             TS.FirstBitGlobalAlarmStatus = "告警状态,故障为设备与软件中断"
          } else {
             TS.FirstBitGlobalAlarmStatus = "设备正常"
          }
          if stringArr[1] == "1" {
             TS.SecondBitGlobalAlarmStatus = "全局告警,故障为硬件故障"
          } else {
             TS.SecondBitGlobalAlarmStatus = "设备正常"
          }
          if stringArr[2] == "1" {
             TS.ThirdBitGlobalAlarmStatus = "全局告警,故障为设备断纤"
          } else {
             TS.ThirdBitGlobalAlarmStatus = "设备正常"
          }
          if stringArr[3] == "1" {
             TS.ForthBitGlobalAlarmStatus = "全局告警,故障为温度告警"
          } else {
             TS.ForthBitGlobalAlarmStatus = "设备正常"
          }
          //第二个寄存器
          Binary2 := string(runeArr[17:33]) //取字符串第1到16个字符,左闭右开
          //字符串转数组
          var stringArr2 [16]string
          for index, value := range Binary2 {
             stringArr2[index] = string(value)
          }
          if stringArr2[0] == "1" {
             TS.FirstBitCollectStatus = "正常采集"
          } else {
             TS.FirstBitCollectStatus = "停止采集"
          }
          if stringArr2[1] == "1" {
             TS.SecondBitCollectStatus = "正常采集"
          } else {
             TS.SecondBitCollectStatus = "停止采集"
          }
          if stringArr2[2] == "1" {
             TS.ThirdBitCollectStatus = "正常采集"
          } else {
             TS.ThirdBitCollectStatus = "停止采集"
          }
          if stringArr2[3] == "1" {
             TS.ForthBitCollectStatus = "正常采集"
          } else {
             TS.ForthBitCollectStatus = "停止采集"
          }
          if stringArr2[4] == "1" {
             TS.FifthBitCollectStatus = "正常采集"
          } else {
             TS.FifthBitCollectStatus = "停止采集"
          }
          if stringArr2[5] == "1" {
             TS.SixthBitCollectStatus = "正常采集"
          } else {
             TS.SixthBitCollectStatus = "停止采集"
          }
          if stringArr2[6] == "1" {
             TS.SeventhBitCollectStatus = "正常采集"
          } else {
             TS.SeventhBitCollectStatus = "停止采集"
          }
          if stringArr2[7] == "1" {
             TS.EighthBitCollectStatus = "正常采集"
          } else {
             TS.EighthBitCollectStatus = "停止采集"
          }
          if stringArr2[8] == "1" {
             TS.NinthBitCollectStatus = "正常采集"
          } else {
             TS.NinthBitCollectStatus = "停止采集"
          }
          if stringArr2[9] == "1" {
             TS.TenthBitCollectStatus = "正常采集"
          } else {
             TS.TenthBitCollectStatus = "停止采集"
          }
          if stringArr2[10] == "1" {
             TS.EleventhBitCollectStatus = "正常采集"
          } else {
             TS.EleventhBitCollectStatus = "停止采集"
          }
          if stringArr2[11] == "1" {
             TS.TwelfthBitCollectStatus = "正常采集"
          } else {
             TS.TwelfthBitCollectStatus = "停止采集"
          }
          if stringArr2[12] == "1" {
             TS.ThirteenthBitCollectStatus = "正常采集"
          } else {
             TS.ThirteenthBitCollectStatus = "停止采集"
          }
          if stringArr2[13] == "1" {
             TS.FourteenthBitCollectStatus = "正常采集"
          } else {
             TS.FourteenthBitCollectStatus = "停止采集"
          }
          if stringArr2[14] == "1" {
             TS.FifteenthBitCollectStatus = "正常采集"
          } else {
             TS.FifteenthBitCollectStatus = "停止采集"
          }
          if stringArr2[15] == "1" {
             TS.SixteenthBitCollectStatus = "正常采集"
          } else {
             TS.SixteenthBitCollectStatus = "停止采集"
          }
          /*第三个寄存器
          //Binary3:=string(runeArr[33:49])//取字符串第1到16个字符,左闭右开
          //var stringArr3[16]string
          //for index,value:=range Binary3 {
          // stringArr3[index]=string(value)
          //}
          //Str2DEC(runeArr[33:49])
          //ChannelNumber:=Str2DEC(Binary3)
          //fmt.Println("设备通道数目为:",Str2DEC(Binary3))*/
          //第五个寄存器
          Binary5 := string(runeArr[65:81]) //取字符串左闭右开
          //字符串转数组
          var stringArr5 [16]string
          for index, value := range Binary5 {
             stringArr5[index] = string(value)
          }
          if stringArr5[0] == "1" {
             TS.FirstBitBrokenFiberStatus = "断纤"
          } else {
             TS.FirstBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[1] == "1" {
             TS.SecondBitBrokenFiberStatus = "断纤"
          } else {
             TS.SecondBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[2] == "1" {
             TS.ThirdBitBrokenFiberStatus = "断纤"
          } else {
             TS.ThirdBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[3] == "1" {
             TS.ForthBitBrokenFiberStatus = "断纤"
          } else {
             TS.ForthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[4] == "1" {
             TS.FifthBitBrokenFiberStatus = "断纤"
          } else {
             TS.FifthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[5] == "1" {
             TS.SixthBitBrokenFiberStatus = "断纤"
          } else {
             TS.SixthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[6] == "1" {
             TS.SeventhBitBrokenFiberStatus = "断纤"
          } else {
             TS.SeventhBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[7] == "1" {
             TS.EighthBitBrokenFiberStatus = "断纤"
          } else {
             TS.EighthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[8] == "1" {
             TS.NinthBitBrokenFiberStatus = "断纤"
          } else {
             TS.NinthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[9] == "1" {
             TS.TenthBitBrokenFiberStatus = "断纤"
          } else {
             TS.TenthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[10] == "1" {
             TS.EleventhBitBrokenFiberStatus = "断纤"
          } else {
             TS.EleventhBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[11] == "1" {
             TS.TwelfthBitBrokenFiberStatus = "断纤"
          } else {
             TS.TwelfthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[12] == "1" {
             TS.ThirteenthBitBrokenFiberStatus = "断纤"
          } else {
             TS.ThirteenthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[13] == "1" {
             TS.FourteenthBitBrokenFiberStatus = "断纤"
          } else {
             TS.FourteenthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[14] == "1" {
             TS.FifteenthBitBrokenFiberStatus = "断纤"
          } else {
             TS.FifteenthBitBrokenFiberStatus = "正常无断纤"
          }
          if stringArr5[15] == "1" {
             TS.SixteenthBitBrokenFiberStatus = "断纤"
          } else {
             TS.SixteenthBitBrokenFiberStatus = "正常无断纤"
          }
          //第六个寄存器
          Binary6 := string(runeArr[81:97]) //取字符串左闭右开
          //字符串转数组
          var stringArr6 [16]string
          for index, value := range Binary6 {
             stringArr6[index] = string(value)
          }
          //fmt.Println("第六个寄存器",stringArr6)
          if stringArr6[0] == "1" {
             TS.FirstBitFiberCutStatus = "断纤"
          } else {
             TS.FirstBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[1] == "1" {
             TS.SecondBitFiberCutStatus = "断纤"
          } else {
             TS.SecondBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[2] == "1" {
             TS.ThirdBitFiberCutStatus = "断纤"
          } else {
             TS.ThirdBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[3] == "1" {
             TS.ForthBitFiberCutStatus = "断纤"
          } else {
             TS.ForthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[4] == "1" {
             TS.FifthBitFiberCutStatus = "断纤"
          } else {
             TS.FifthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[5] == "1" {
             TS.SixthBitFiberCutStatus = "断纤"
          } else {
             TS.SixthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[6] == "1" {
             TS.SeventhBitFiberCutStatus = "断纤"
          } else {
             TS.SeventhBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[7] == "1" {
             TS.EighthBitFiberCutStatus = "断纤"
          } else {
             TS.EighthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[8] == "1" {
             TS.NinthBitFiberCutStatus = "断纤"
          } else {
             TS.NinthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[9] == "1" {
             TS.TenthBitFiberCutStatus = "断纤"
          } else {
             TS.TenthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[10] == "1" {
             TS.EleventhBitFiberCutStatus = "断纤"
          } else {
             TS.EleventhBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[11] == "1" {
             TS.TwelfthBitFiberCutStatus = "断纤"
          } else {
             TS.TwelfthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[12] == "1" {
             TS.ThirteenthBitFiberCutStatus = "断纤"
          } else {
             TS.ThirteenthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[13] == "1" {
             TS.FourteenthBitFiberCutStatus = "断纤"
          } else {
             TS.FourteenthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[14] == "1" {
             TS.FifteenthBitFiberCutStatus = "断纤"
          } else {
             TS.FifteenthBitFiberCutStatus = "正常无断纤"
          }
          if stringArr6[15] == "1" {
             TS.SixteenthBitFiberCutStatus = "断纤"
          } else {
             TS.SixteenthBitFiberCutStatus = "正常无断纤"
          }
          //第8个寄存器
          Binary8 := string(runeArr[113:121]) //取字符串左闭右开
          //字符串转数组
          var stringArr8 [8]string
          for index, value := range Binary8 {
             stringArr8[index] = string(value)
          }
          //fmt.Println("第8个寄存器",stringArr8)
          if stringArr6[0] == "1" {
             TS.FirstBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.FirstBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[1] == "1" {
             TS.SecondBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.SecondBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[2] == "1" {
             TS.ThirdBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.ThirdBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[3] == "1" {
             TS.ForthBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.ForthBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[4] == "1" {
             TS.FifthBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.FifthBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[5] == "1" {
             TS.SixthBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.SixthBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[6] == "1" {
             TS.SeventhBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.SeventhBitFiberCutAlarmStatus = "正常无断纤"
          }
          if stringArr6[7] == "1" {
             TS.EighthBitFiberCutAlarmStatus = "断纤"
          } else {
             TS.EighthBitFiberCutAlarmStatus = "正常无断纤"
          }
    
          var arr = [5]DeviceStatus{
             {1, "GlobalAlarm:", TS.FirstBitGlobalAlarmStatus, TS.SecondBitGlobalAlarmStatus, TS.ThirdBitGlobalAlarmStatus,
                TS.ForthBitGlobalAlarmStatus, BitNotConsidered, BitNotConsidered, BitNotConsidered,
                BitNotConsidered, BitNotConsidered, BitNotConsidered, BitNotConsidered,
                BitNotConsidered, BitNotConsidered, BitNotConsidered, BitNotConsidered,
                BitNotConsidered},
             {2, "CollectStatus:", TS.FirstBitCollectStatus, TS.SecondBitCollectStatus, TS.ThirdBitCollectStatus,
                TS.ForthBitCollectStatus, TS.FifthBitCollectStatus, TS.SixthBitCollectStatus, TS.SeventhBitCollectStatus,
                TS.EighthBitCollectStatus, TS.NinthBitCollectStatus, TS.TenthBitCollectStatus, TS.EleventhBitCollectStatus,
                TS.TwelfthBitCollectStatus, TS.ThirteenthBitCollectStatus, TS.FourteenthBitCollectStatus, TS.FifteenthBitCollectStatus,
                TS.SixteenthBitCollectStatus},
             {5, "CH1~16断纤告警状态:", TS.FirstBitBrokenFiberStatus, TS.SecondBitBrokenFiberStatus, TS.ThirdBitBrokenFiberStatus,
                TS.ForthBitBrokenFiberStatus, TS.FifthBitBrokenFiberStatus, TS.SixthBitBrokenFiberStatus, TS.SeventhBitBrokenFiberStatus,
                TS.EighthBitBrokenFiberStatus, TS.NinthBitBrokenFiberStatus, TS.TenthBitBrokenFiberStatus, TS.EleventhBitBrokenFiberStatus,
                TS.TwelfthBitBrokenFiberStatus, TS.ThirteenthBitBrokenFiberStatus, TS.FourteenthBitBrokenFiberStatus, TS.FifteenthBitBrokenFiberStatus,
                TS.SixteenthBitBrokenFiberStatus},
             {6, "CH17~32断纤告警状态:", TS.FirstBitFiberCutStatus, TS.SecondBitFiberCutStatus, TS.ThirdBitFiberCutStatus,
                TS.ForthBitFiberCutStatus, TS.FifthBitFiberCutStatus, TS.SixthBitFiberCutStatus, TS.SeventhBitFiberCutStatus,
                TS.EighthBitFiberCutStatus, TS.NinthBitFiberCutStatus, TS.TenthBitFiberCutStatus, TS.EleventhBitFiberCutStatus,
                TS.TwelfthBitFiberCutStatus, TS.ThirteenthBitFiberCutStatus, TS.FourteenthBitFiberCutStatus, TS.FifteenthBitFiberCutStatus,
                TS.SixteenthBitFiberCutStatus},
             {8, "CH25~32断纤告警状态:", TS.FirstBitFiberCutAlarmStatus, TS.SecondBitFiberCutAlarmStatus, TS.ThirdBitFiberCutAlarmStatus,
                TS.ForthBitFiberCutAlarmStatus, TS.FifthBitFiberCutAlarmStatus, TS.SixthBitFiberCutAlarmStatus, TS.SeventhBitFiberCutAlarmStatus,
                TS.EighthBitFiberCutAlarmStatus, BitNotConsidered, BitNotConsidered, BitNotConsidered,
                BitNotConsidered, BitNotConsidered, BitNotConsidered, BitNotConsidered,
                BitNotConsidered},
          }
          var number = [1]DeviceStatusNumber{
             {3, "ChannelNumber:", Str2DEC(string(runeArr[33:49]))},
          }
          for i := 0; i < len(number); i++ {
             fmt.Println(number[i])
          }
          for i := 0; i < len(arr); i++ {
             fmt.Println(arr[i])
          }
    
    
    
    
    
       }
    
     
    
    
    
    
    
       }
    
    
    
    
    
    
    }
    展开全文
  • 专门针对各种智能仪表,智能设备而设计的modbus测试工具。可以自定义数据类型,字节顺序,还内嵌了数据处理智能算法,对读到的数据进行二次加工,以符合最终需要。方便各类物联网设备调试
  • MODBUSTCP调试软件

    2021-02-01 15:29:20
    友善调试串口,modbus poll ,modbus slave,CRC计算工具,tcp IP 调试助手,NetAssist助手,串口助手,
  • modbus调试助手(从站)modbus调试助手(从站)modbus调试助手(从站)modbus调试助手(从站)
  • 1、当我们想读取100个寄存器的地址的时候,比如起始地址1100,然后如果在助手里面只设置了不足100个地址的时候,读取数据就会报错,所以在助手里面开辟的地址已经要大于等于需要读取的地址,如下: 这里只开辟了一...

    1、当我们想读取100个寄存器的地址的时候,比如起始地址1100,然后如果在助手里面只设置了不足100个地址的时候,读取数据就会报错,所以在助手里面开辟的地址已经要大于等于需要读取的地址,如下:
    在这里插入图片描述
    这里只开辟了一个地址。

    展开全文
  • MODBUS TCP/RTU调试工具,附主子站模拟器。两个工具其中一个modscan,另外一个是modbus rtu/tcp 主子站模拟器,开发必备。
  • 自己用VS2010做的一个小工具,可以方便调试网络应用程序,同时支持TCP和UDP通信,能够发送16进制和显示16进制,该资源包含源码,可以方便大家学习与修改其中的不足。
  • S71500 PLC 与第三方设备 ModbusTCP 通信 项目调试记录 项目背景: 采用 S7-1500 PLC 与 第三方非标设备(支持Modbus TCP 协议) 做 MODBUS TP 通信 ; 项目网络拓扑: S7-1500 PLC 一侧网络拓扑,硬件配置: ...
  • modbus调试助手 qt源码 可以tcp 或者串口通信
  • Modbus 调试助手的使用(一)

    万次阅读 2019-11-16 14:06:16
    上一篇文章提到Modbus协议包括ASCII、RTU、TCP三种,这次和大家分享的是Modbus调试助手使用TCP协议的设置。TCP协议下有Server和Client,两个都需要设置,不然只有一个也无法通信啊~ 遥想当年我连网络调试助手也不会...
  • ModbusTCP_Master V2.1.rar

    2020-07-21 22:05:48
    以太网调试助手,很好用的以太网调试工具。modbus tcp主机模式调试助手,在没有实物板的时候可以使用软件验证功能性,物联网调试工具。
  • Modbus TCP Tool

    热门讨论 2011-12-11 09:34:35
    ModBus TCP tool ,方便调试Modbus通信,可以使用客户端配置数据。可以模拟服务器和客户端。开发服务器和客户端,不需要两个同时开发,只开发自己需要的。
  • 标准Modbus TCP通信测试工具,两个测试工具主要用于plcModbus TCP通信测试,可分别可是客户端和服务器端 测试环境:西门子SMART s7-200 PLC
  • modbus协议调试工具 支持TCP和串口 modbus协议调试工具。中文版,支持寄存器可配置,方便快速便捷 使用人员超速了解modbus协议
  • 1.支持串口、TCP以及UDP通信,从机可使用动态IP地址(从机需具备心跳功能); 2.支持同时建立多个主机(轮询方案); 3.每个主机可轮询多个从机,从机可以是同类型的,也可是不同类型的; 4.支持保持寄存器的查询...
  • 本例程介绍了 Modbus 调试助手的使用方法。 本例介绍了 Modbus-TCP 的 Server 的功能块的使用。 本例介绍了 Modbus-TCP 的 Client 的功能块的使用。 CX5020 作为 Modbus-TCP Client 操作步骤请参考 CX5020-0112 ...
  • ModbusTcp客户端工具

    2020-04-05 11:55:16
    程序使用了NModbus4框架实现基于以太网TCP/IP的Modbus协议,能读写线圈、读写保持寄存器、读离散输入量和输入寄存器。
  • “无论创作还是欣赏,都是对法则和规律的逃逸,自由是艺术的源泉”-- 黑格尔TCP调试助手中,在发送时可以选择十六进制发送或者字符串形式发送!其实,两者最终调用的都是系统的socket send函数,例如linux下的send...
  • modbustcp测试软件

    2012-08-13 12:33:51
    modbustcp测试软件,可以读取线圈,寄存器等数据,分为同步和异步,同时可以写入数据。
  • 使用三菱FX5UPLC采用Modbus TCP 方式,FX5U访问FX5U或者访问其他Modbus TCP通信的仪器仪表设备 在编写通信的时候请详细看说明文档。
  • Modbus TCP / IP 通过TCP / IP的Modbus RTU TCP / IP上的Modbus ASCII Modbus UDP / IP UDP / IP上的Modbus RTU UDP / IP上的Modbus ASCII 2、MODBUS POLL技术事实和特点: OLE自动化,可使用宏语言VBA轻松连接到...
  • 资源是一个ModbusTcp Matster\Slave测试软件,可用于测试ModbusTCP设备的通讯状态,以及查看设备内部寄存器的数据,有原码可以参考它做更多功能的扩展
  • 一种成熟的MODBUS调试测试工具助手软件(MThings) 免费中文 现有MODBUS调测软件种类丰富,基本可以满足日常调测需求,但是面对用户群体对高效灵活友好的进一步需求都存在着差距。 MThings是一款全新的标准化MODBUS调...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 262
精华内容 104
关键字:

modbustcp调试助手