zoukankan      html  css  js  c++  java
  • ModbusRTU_Slave之FB的建立

    (*
    1、III型Modbus TCP客户端模块
    2、为了实现通用化
    *)
    FUNCTION_BLOCK ModbusRTU_Slave
    VAR_IN_OUT 
           dwBaudRate:                   WORD;                             //波特率
           Device:                       UINT;                                //串口号
           NumBits:                      INT;                               //线圈状态寄存器个数
           NumInputBits:                 INT;                               //输入状态寄存器个数
           NumRegisters:                 INT;                               //保持寄存器个数
           NumInputRegisters:            INT;                               //输入寄存器个数
             
           //寄存器
           tab_bits:                     ARRAY[0..149] OF BOOL;             //线圈状态寄存器 1位,最高300个,客户端只写,服务端只读
           tab_inputbits:                ARRAY[0..149] OF BOOL;             //输入状态寄存器1位,最高300个,客户端只读,服务端只写 
           tab_regs:                     ARRAY[0..149] OF INT;             //保持寄存器 16位,最高300个,客户端只写,服务端只读 
           tab_inputregs:                ARRAY[0..149] OF INT;             //输入寄存器16位,最高300个,客户端只读,服务端只写      
    END_VAR
    VAR_OUTPUT
            Status:                      UINT;
            errorID:                     UINT := 0;
    END_VAR
    VAR
            //实例化
            MBUS_RTU_Connect      :HSMBUS.ModbusHsRtuConnect;
            MBUS_RTU_SLAVE:              HSMBUS.ModbusHsRtuSlave;    (* modbus rtu slave  *) 
            uiMbsStatus           :UINT;    
            uiMbsError              :UINT := 0;
    END_VAR
    MBUS_RTU_Connect(
        bEnable:= TRUE, 
        iDeviceId:= Device, 
        dBaud:= dwBaudRate, 
        iParity:= 0, 
        iConnectType:= 1, 
        iError=> uiMbsError, 
        iStatus=> uiMbsStatus);
        
    IF (uiMbsStatus <> 1) THEN
        RETURN;
    END_IF
    
    MBUS_RTU_SLAVE(
                iDeviceId:= Device, 
                iSlaveId:= 1, 
                bEnable:= TRUE, 
                iDiscreteInputNums:= INT_TO_UINT(NumInputBits), 
                pDiscreteInputs:= ADR(tab_inputbits),   //输入对方线圈状态数据 
                iCoilNums:= INT_TO_UINT(NumBits), 
                pCoils:= ADR(tab_bits),        //读取对方线圈状态数据
                iInputRegisterNums:= INT_TO_UINT(NumInputRegisters), 
                pInputRegisers:= ADR(tab_inputregs), //输入对方寄存器数据 
                iRegiserNums:= INT_TO_UINT(NumRegisters), 
                pRegisers:= ADR(tab_regs),        //读取对方寄存器数据  
                iError=> errorID, 
                iStatus=> Status);
  • 相关阅读:
    创建struct类型的数组
    simulate windows touch input
    Could not load file using Ranorex runtime : General Questions
    UIAutomator 编译
    w3cmark前端精彩博文周报 10.27-11.2
    w3cmark前端精彩博文周报 10.20-10.27
    w3cmark前端精彩博文周报 10.13-10.19
    sublime自定义snippet代码片段
    Iconfont在移动端遇到问题的探讨
    一个小效果引出的兼容性探讨
  • 原文地址:https://www.cnblogs.com/csflyw/p/14648480.html
Copyright © 2011-2022 走看看