php接收rtu数据包 php接收get请求

求高人写个modbus RTU的通讯协议 怎么收发数据

看你的问题挂了好多天了,给你点资料吧。

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站建设、类乌齐网络推广、重庆小程序开发、类乌齐网络营销、类乌齐企业策划、类乌齐品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供类乌齐建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

这是modbus的官网技术资源汇总。

在计算机上实现modbus,如无特殊要求一般不需要自己写代码,直接用现成的动态库。

搜索ActiveX试试,我没用过,但我知道同事有用过,具体用的哪一个不知道,但据说效果还不错。

php如何发送和接收JSON数据

对于json,PHP有对应的方法进行操作。

一般而言,json会以字符串形式传给PHP脚本,一般都是放在$_POST里面,

14

?php

// 接收

$json_parameter = $_POST['json_str'];

// 处理, 变成数组

$array = json_decode($json_parameter);

// PHP 把数组数据变成json格式字符串,发给页面

$demo = array(

'key' = 'value',

'key2' = 'value2'

);

$demo_json = json_encode($demo); // 格式是{"key":"value","key2":"value2"}

echo $demo_json;

请大神帮忙写段 php代码 解析 Websocket 接收到的数据

姜维为了力挽狂澜,假意投降钟会,两人合谋除掉了邓艾。然而举事之时,由于机谋泄露,钟会死于殿上,姜维亦自尽身亡。一番巧计,成为虚话。[1] 随后不久,司马昭病逝,司马炎废曹奂而自称为帝,国号大晋。晋泰始元年(265年)魏国灭亡。

php 实现crc16验证 modbus该如何实现?

在工业控制中,Modbus RTU CRC16的校验码用的比较广泛,包括本人富士产品中,PC与伺服电机以及PC与VP系列的变频器的Modbus RTU通讯中都使用到了CRC16.

而对CRC16的计算的方式基本上有2种:第一种,使用双循环依照CRC的计算方法进行计算,第二种,采用查表的方式。本人愚钝无比,从网络上搜来的查表法都与实际的正确CRC16的结果有所差异,因此编写了一个小程序供自己使用。

软件的界面很简单,输入诸如“010303020014”的值,然后每2个字符作为一个字节,填入字节数,然后就可以计算出校验码,校验码的多项式为:X16+X15+X2+1.

程序界面如下:

实现的源代码如下:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Memo1: TMemo;

Label4: TLabel;

function CalCRC16(AData:array of Byte;AStart,AEnd:Integer):Word;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//××××××××××××××××××××××××××

// CalCRC16用于计算Modbus RTU的CRC16

// 多项式公式为X16+X15+X2+1

//××××××××××××××××××××××××××

function TForm1.CalCRC16(AData:array of Byte;AStart,AEnd:Integer):Word;

const

GENP=$A001; //多项式公式X16+X15+X2+1(1100 0000 0000 0101)

var

crc:Word;

i:Integer;

tmp:Byte;

procedure CalOneByte(AByte:Byte); //计算1个字节的校验码

var

j:Integer;

begin

crc:=crc xor AByte; //将数据与CRC寄存器的低8位进行异或

for j:=0 to 7 do //对每一位进行校验

begin

tmp:=crc and 1; //取出最低位

crc:=crc shr 1; //寄存器向右移一位

crc:=crc and $7FFF; //将最高位置0

if tmp=1 then //检测移出的位,如果为1,那么与多项式异或

crc:=crc xor GENP;

crc:=crc and $FFFF;

end;

end;

begin

crc:=$FFFF; //将余数设定为FFFF

for i:=AStart to AEnd do //对每一个字节进行校验

CalOneByte(AData[i]);

Result:=crc;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Data:array[0..255] of Byte;

i,j,Count:Integer;

Res:Word;

szData:string;

begin

szData:=Form1.Edit2.Text; //读入欲校验的字符串

Count:=StrToInt(form1.Edit3.Text); //读入需要计算的字符串长度

i:=1;

j:=0;

for j:=0 to Count-1 do

begin

if (i mod 2)=0 then //每2个字符放入一个字节中

i:=i+1;

if i=Length(szData) then

exit;

Data[j]:=StrToInt('$'+copy(szData,i,2)); //取出字符并转换为16进制数

i:=i+1;

end;

Res:=CalCRC16(Data,Low(Data),Count-1);

form1.Edit1.Text:=IntToHex(Res,4);

end;

end.


名称栏目:php接收rtu数据包 php接收get请求
转载源于:http://scyanting.com/article/dopoogh.html