class ModbusMaster {
  private $sock;
  public $host = "192.168.1.1";
  public $port = "502";  
  public $client = "";
  public $client_port = "502";
  public $status;
  public $timeout_sec = 5; // Timeout 5 sec
  public $endianness = 0; // Endianness codding (little endian == 0, big endian == 1) 
  public $socket_protocol = "UDP"; // Socket protocol (TCP, UDP)
//这里的参数该怎么填写,主要是端口和ip。
//比如我现在想用本地电脑php程序和板子通讯,这里的ip和端口该填什么,哪个是电脑ip,哪个是板子ip,对应的端口怎么来的  /**
   * readMultipleRegisters
   *
   * Modbus function FC 3(0x03) - Read Multiple Registers.
   * 
   * This function reads {@link $quantity} of Words (2 bytes) from reference 
   * {@link $referenceRead} of a memory of a Modbus device given by 
   * {@link $unitId}.
   *    
   *
   * @param int $unitId usually ID of Modbus device 
   * @param int $reference Reference in the device memory to read data (e.g. in device WAGO 750-841, memory MW0 starts at address 12288).
   * @param int $quantity Amounth of the data to be read from device.
   * @return false|Array Success flag or array of received data.
   */
  function readMultipleRegisters($unitId, $reference, $quantity){
//还有就是这个函数的几个参数怎么来的,后面两个好理解,$unitId这个设备id哪里来的
//下面是硬件上需要设置的参数,如果知道怎么设置,求指教,我也是一直在模式着设参数,小白一个。

解决方案 »

  1.   

    private $sock;
      public $host = "192.168.1.1";     对应设备的IP地址
      public $port = "502";         好像是自身的端口号。
      public $client = "";
      public $client_port = "502"; 对应设备的上的端口号,modbus协议一般都是502端口,当然也可以改为其他端口,但是需要和设备上的端口号对应
      public $status;
      public $timeout_sec = 5; // Timeout 5 sec
      public $endianness = 0; // Endianness codding (little endian == 0, big endian == 1) 
      public $socket_protocol = "UDP"; // Socket protocol (TCP, UDP)
    function readMultipleRegisters($unitId, $reference, $quantity)     //unitd  modbus从站的站号,对应设备上的  '本机地址'
                                                                                                               //reference  表示modbus地址
                                                                                                                 //quantity   读多少个modbus地址的个数
    例子:   readMultipleRegisters(10, 11, 12) 表示从站号为10的从站,从4X00011开始读10个数
      

  2.   

    以下是,我对原作者的测试程序,进行测试的代码,
    //////////////////////////////////////////////////////////////////////////////////////////////////
    另外需要注意,在原作者的文件ModbusMaster.php中,多个地方需要修改为
     $aa = new IecType; //类实例化,
      $buffer2 .= $aa->iecBYTE(3);             // 这种调用模式
    /////////////////////////////////////////////////////////////////////////////////////////////////
    <?php
    require_once dirname(__FILE__) . '/../../Phpmodbus/ModbusMasterTcp.php';
    require_once dirname(__FILE__) . '/../config.php';$test_host_ip = "127.0.0.1";    $test_bind_client_ip = "192.192.15.113";
      
    // Create Modbus object$modbus = new ModbusMasterTcp($test_host_ip);// Data to be writen - BYTE$data = array(55, 32, 1, 77, 33);
    $dataTypes = array("BYTE", "BYTE", "BYTE", "BYTE", "BYTE");// Write data - FC 16
    $modbus->writeMultipleRegister(25, 100, $data, $dataTypes);// Read data - FC3$recData = $modbus->readMultipleRegisters(25, 100, 10);var_dump($recData);
      

  3.   

    我才刚学PHP,还望赐教qq 61750873