Modbus TCP&RTU 协议库测试带界面

mndsoft 4月前 549

最近在学习相关Modbus,基于本坛大拿 axuanup封装的周立功的Modbus库学习测试,具体库文件这里:axuanup 封装modbus库。

这个学习demo 可以 网络TCP,串口RTU收发数据。使用站长 光庆大师的 godking.vlistEx直观显示 DI,DO状态,1秒间隔定时刷新。

另日志显示使用 axuanup enet.richeditEx做收发数据信息显示,在此对2位大师的库表示感谢。

另外还有一点不完美的是周立功的Modbus库有一个自定义写读命令串的函数,我照葫芦画瓢加了这个 ZMB_WriteCmdBuf函数,但是测试出错,知道自己还学到那个程度,慢慢来哈。

自定义写读命令串一般用于扩展非标modbus协议,周立功的Modbus库支持这个功能,其他第三方modbus库好像都是固定一些功能。 当然,如果按照modbus协议格式自己写收发指令也是可以的,但是既然周立功的Modbus库有这个功能就可以省去很多时间了哈。



另附有关 ZMB_WriteCmdBuf 函数出错信息,希望大师有空指导一二,再次感谢。

    //自定义写命令串 hand,BYTE *pBuf,int iLen,int nAddCheck,WORD TranID;
    //TranID 在 TCP 的 MODBUS 协议里需要用到任务 ID 号,如果为 0 使用系统自生成的,串口MODBUS 此参数无效。
    WriteCmdBuf = function(data,num ) {
        if (this.handle) {
            var n = bytetoew(data, self.wordtobyte)
            n = self.ertoyi(n, #n, 2)
            self.ZMB_WriteCmdBuf(this.handle,self.tobuffer(n),n, 0)
        }
    }


运行出错信息:

---------------------------
RAW CALLBACK ERROR
---------------------------
文件:C:\aardio\lib\modbus\modbustcp.aardio
错误行号:#121
调用函数名:'ZMB_WriteCmdBuf'
错误参数:@2
'
预期:number
实际获取:buffer'
---------------------------------------------------


上传的附件:
最新回复 (4)
  • mndsoft 4月前
    0 2

    已解决 ZMB_WriteCmdBuf  和 ZMB_ReadRecBuf这个功能函数。

    可以在库中增加以下即可,可以实现自由写命令串,这样一些非标的modbus指令就可以直接收发了,不错,这个库。

    分享下供参考。

    ZMB_WriteCmdBuf  = dll.api( /*写自定义命令串*/ "ZMB_WriteCmdBuf", "int( INT hand, string pBuf, int iLen,int nAddCheck)");
    
        //自定义写命令串 hand,BYTE *pBuf,int iLen,int nAddCheck,WORD TranID;
        //TranID 在 TCP 的 MODBUS 协议里需要用到任务 ID 号,如果为 0 使用系统自生成的,串口MODBUS 此参数无效。
        WriteCmdBuf = function(data,iLen) {
            if (this.handle) {
                self.ZMB_WriteCmdBuf(this.handle,..string.unhex(data," ") ,iLen, 0)
            }
        } 
        
        //调用 字符串方式
        	a="01 32 F0 00 00 0A"
           m.WriteCmdBuf(a,6)


  • 光庆 4月前
    0 3

    因为你的图片内容本身没有居中,所以绘制出来不美观。

    针对这种情况,虚表库增加了 offsetx、offsety 属性,用于图片偏移,让你在图片本身内容不居中的情况下,调整图片位置,达到在单元格中居中的效果。

    请下载新版虚表库,然后用下面的代码( offsety 属性 ),让第二列图片水平居中、垂直居中

    var t = {
        {"通道1","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道2","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道3","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道4","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道5","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道6","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道7","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道8","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道9","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道10","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"通道11","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" }
        {"通道12","<img name='SWOFF',offsety=3,w=90,h=40>","<img name='DIOFF',w=36,h=36>" } 
        {"总控开关","<img name='ALLOFF',w=90,h=40>","" } 
    }

  • mndsoft 4月前
    0 4
    好的,这样漂亮多了,谢谢大师
  • axuanup 4月前
    0 5
    大佬
返回