IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 上位机与PLC基于Fins/UDP通信 -> 正文阅读

[网络协议]上位机与PLC基于Fins/UDP通信

Fins/UDP通信

编写上位机通过发送Fins/UDP命令读写plc内部数据,可以用于上位机socket通讯测试,员工操作监控,运行日志打印。Fins/UDP是以十六进制字符发送命令,所以所有字符在发送前都需要将其转换成十六进制。

写格式

固定头:800002		不变
plc节点:006E00		地址:XXX.XXX.XXX.110
PC节点:00F400		地址:XXX.XXX.XXX.244
结束:00				不变
写代码:0102			不变
D区代码:82			不变
D区地址:01A600		根据需求修改,十六进制数据
写入长度:0001		根据需求修改,十六进制数据
写入数据:0212		

写反馈

固定头:C00002		不变
PC节点:00F400		地址:XXX.XXX.XXX.244
plc节点:006E00		地址:XXX.XXX.XXX.110
结束:00				不变
写代码:0102			不变
写入成功:0000

读格式

固定头:800002		不变
plc节点:006E00		地址:XXX.XXX.XXX.110
PC节点:00F400		地址:XXX.XXX.XXX.244
结束:00				不变
读代码:0101			不变
D区代码:82			不变
D区地址:01A600		根据需求修改,十六进制数据
读取长度:0002		根据需求修改,十六进制数据
	

读反馈

固定头:C00002		不变
PC节点:00F400		地址:XXX.XXX.XXX.244
plc节点:006E00		地址:XXX.XXX.XXX.110
结束:00				不变
读代码:0101			不变
plc状态:0000		自动变换
plc反馈的数据:66664006	

进制间转换函数

int型与字符串转16进制,16进制转字符串。

int-to-16进制

int num=666;
QString Dnum = QString::number(num,16);

字符串-to-16进制

QByteArray ReadPLC::QString2Hex(QString str)
{
    QByteArray senddata;
    int hexdata,lowhexdata;
    int hexdatalen = 0;
    int len = str.length();
    senddata.resize(len/2);
    char lstr,hstr;
    for(int i=0; i<len; )
    {
        hstr=str[i].toLatin1();
        if(hstr == ' ')
        {
            i++;
            continue;
        }
        i++;
        if(i >= len)
            break;
        lstr = str[i].toLatin1();
        hexdata = ConvertHexChar(hstr);
        lowhexdata = ConvertHexChar(lstr);
        if((hexdata == 16) || (lowhexdata == 16))
            break;
        else
            hexdata = hexdata*16+lowhexdata;
        i++;
        senddata[hexdatalen] = (char)hexdata;
        hexdatalen++;
    }
    senddata.resize(hexdatalen);
    return senddata;
}

char ReadPLC::ConvertHexChar(char ch)
{
    if((ch >= '0') && (ch <= '9'))
        return ch-0x30;
    else if((ch >= 'A') && (ch <= 'F'))
        return ch-'A'+10;
    else if((ch >= 'a') && (ch <= 'f'))
        return ch-'a'+10;
    else return (-1);
}

16进制-to-字符串

	自行补充

Fins/UDP通信

读函数与写函数都差不多,读写反馈可以使用信号槽来监听新数据,也可以直接后面写函数来读取,只不过需要做一下延时处理。

读写函数

/*函数功能:读取PLC数据
函数参数说明:
*bindPort:plc端口
*bindIP:plcIP
*winIP:PCIP
*IO:读取位数
*WID:读取地址
*/
void ReadPLC::readplcdata(QString bindPort,QString bindIP, QString winIP, int IO, int WID)
{
    QString plcip,winddowip;      
    int plcIPEnd = bindIP.split(".").at(3).toInt();
    plcip = QString::number(plcIPEnd,16).toUpper();   

    int winIPEnd = winIP.split(".").at(3).toInt();
    winddowip = QString::number(winIPEnd,16).toUpper();  //得到win的十六进制

    if(plcip.size()==1){
        plcip = "0"+plcip;
    }
    if(winddowip.size()==1){
        winddowip = "0"+winddowip;
    }

    QString ID = intTo16(WID);   
    QString writeIO = "000"+QString::number(IO,16).toUpper();     
    QString plcwrite = "80000200"+plcip+"0000"+winddowip+"0000010182";

    plcwrite +=  ID+"00000"+QString::number(IO); 
    QByteArray data = QString2Hex(plcwrite);  //字符串转16

    udpsocket->writeDatagram(data, QHostAddress(bindIP), quint16(bindPort.toInt()));
}

读写反馈

void ReadPLC::Read_plc_data()
{
    QByteArray datagram;
    datagram.resize(int(udpsocket->pendingDatagramSize()));
    udpsocket->readDatagram(datagram.data(),datagram.size());
    QString str = datagram.data();
    QString byte = datagram.toHex();
    if(!byte.isEmpty())
    {
        // qDebug()<<"16进制:"<<datagram.toHex();
         QString str_rev = QString(datagram.toHex(' ').toUpper().append(' '));
         qDebug()<<"data:"<<str_rev;
		//转换为字符
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:36:04  更:2021-12-26 22:37:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:33:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码