modbus 协议 功能码 03 和 04的区别

modbus 协议 功能码 03 和 04的区别

function Code 03是用于读Holding Registers,而Function Code 04用于读Input Registers。两个功能码的区别在于使用在不同的寄存器上。
Input Register用于读取Slave的信息,长度为16-bit,只能读,不能写,地址范围是30001 – 39999。
Holding Register用于读取Slave的信息,或向Slave发送信息,长度为16-bit,可以读,也可以写,地址范围是40001 – 49999。
为什么只能用03来读数据呢?因为你要读的Slave,把数据放在了Holding Registers里,地址是4xxxx。之所以选择Holding Register,考虑到既要能读,也要能写。

谷歌字体的代理

Google Fonts

原地址:

fonts.googleapis.com/

CSS.NET 推荐

https://fonts.css.network/

中国科学技术大学

主页 https://lug.ustc.edu.cn/wiki/start

https://fonts.proxy.ustclug.org
fonts.gstatic.com       fonts-gstatic.proxy.ustclug.org
fonts.googleapis.com    fonts.proxy.ustclug.org
ajax.googleapis.com     ajax.proxy.ustclug.org

其它反向代理

registry-1.docker.io            docker.mirrors.ustc.edu.cn
packages.elastic.co             elastic.proxy.ustclug.org
ppa.launchpad.net               launchpad.proxy.ustclug.org
archive.cloudera.com/cdh5/      cloudera.proxy.ustclug.org/cdh5/
downloads.lede-project.org      lede.proxy.ustclug.org
downloads.openwrt.org           openwrt.proxy.ustclug.org
registry.npmjs.org              npmreg.proxy.ustclug.org
www.npmjs.com                   npm.proxy.ustclug.org
themes.googleusercontent.com    google-themes.proxy.ustclug.org
secure.gravatar.com             gravatar.proxy.ustclug.org

Laravel/Passport 给API做认证三

Laravel/Password 使用。

前面写过给只用帐户密码登录的写个中转的路由,实际使用过程中发现个问题,如果用户认证失败,应该返回个json,说明哪方面的原因失败。可实际返回的是GuzzleHttp的异常信息,一大串,不好看,而且还暴露了些不该出现的信息。

所以修改了一下。

Route::post('/auth/password', function (\Illuminate\Http\Request $request){
    $http = new \GuzzleHttp\Client();

    try
    {
        $response = $http->post(url('/oauth/token'), [
            'form_params' => [
                'grant_type' => env('OAUTH_GRANT_TYPE_PASSWORD'),
                'client_id' => env('OAUTH_CLIENT_ID_PASSWORD'),
                'client_secret' => env('OAUTH_CLIENT_SECRET_PASSWORD'),
                'scope' => env('OAUTH_SCOPE_PASSWORD'),
                'username' => $request->input('username'),
                'password' => $request->input('password'),
            ],
        ]);
        return json_decode((string)$response->getBody()->getContents(), true);
    } catch (RequestException $e) {
        if ($e->hasResponse()) {
            return $e->getResponse();
        }
        $code = $e->getCode();
        $message = 'ERROR:';
        $message .= $code;

        return response()->json([
            'code' => 200,  // or $code
            'message' => $message
        ], 200 /* or $code */);
    }
});

有好事者可以继续研究下如何在异常时展示更清楚的内容。