欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2021-05-17Snap7与西门子PLC读取

程序员文章站 2024-01-16 10:38:46
...

snap7中i区和Q区调用什么函数?

IPI stands for Inputs Process Image and IPU for Outputs Process Image. They are two memory areas in which (or from which) the physical I/O are copied automatically by the Bus Processor.

 

Snap7 / Discussion / General Discussion: IPU and IPI Areas, abbreviation? (sourceforge.net)

 

使用什么0000111这样的输出?bitset

 

typedef unsigned char   uint8_t;

typedef uint8_t    byte;  //这个是在snap7中定义的,不是C++标准的。

  • unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的)
  • 在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255
  • 当初始化的数字超过了256,它就报错了!!!

|=是位操作运算符的一种?

其形式为: a|=b 代表的含义为a=a|b;即把a和b做按位或(|)操作,结果赋值给a

如 char a = 0x12, b = 0x34;
a|=b = 0x12|0x34
写为二进制为:
B00010010
B00110100
结果为
B00110110
即0x36。

Qt将int类型转换为二进制输出?

    unsigned int b = 1257;
    qDebug()<<qPrintable(QString::number(b, 2))<<endl;


    byte myByte = 2;
    unsigned int b = myByte;  //其本质是unsigned char类型
    qDebug()<<qPrintable(QString::number(b, 2))<<endl;

Qstring::number看来经常用呀?

void PLC_Siemens::ReadCycle()
{
    int res;
    res = MyS7Client->DBRead(1, 0, 30, &DB_Buffer);
    if (res!=0)
    {
        qDebug()<< "Error read from DB:" << "1 "<<QString::number(res);
    }
    //qDebug()<< "Read from DB:" << "1 "<<QString::number(res);
}
uint PLC_Siemens::getUInt16(byte *Buffer, int Pos)
{
    return ((Buffer[Pos] << 8) | Buffer[Pos + 1]);
}

把一个树写进去?

bool PLC_Siemens::WriteVal(dataType typ, int dbNum, int offset, int val)
{
    QMutexLocker locker(&mutex);
    if (MyS7Client->Connected())
    {
        if (typ == eByte )
        {
            int res = MyS7Client->DBWrite(dbNum, offset,1,&val);
            qDebug()<< "Write to DB" << dbNum <<".DBB"<<offset << ", res= " <<QString::number(res);
            return res;
        }
        else
        {
            return false;
        }
    }
    else
    {
        //connect();
        return false;
    }
}

qPrintable是用来作什么的?

QString能将数字转换为字符串,通过使用静态函数QString::number():

str = QString::number(59.6);

要将一个QString转换为一个const char *,就使用toAscii()或toLatin1()。 这些函数返回一个QByteArray,它能被转换为一个const char *,通过使用QByteArray::data()或QByteArray::constData()。 例如:

printf("User: %s\n", str.toAscii().data());

为了方便,Qt提供qPrintable()宏,它执行和toAscii().constData()顺序相同的操作。

printf("User: %s\n", qPrintable(str));

多条Qstring?

1 QString str;
2 str = QString("%1 was born in %2.").arg("Joy").arg(1993);     //str =  "Joy was born in 1993.";

用这个可以减少使用textEdit? 


txt = txt + "Byte "+ QString::number(i) +" : " + QString::number( plcSiemens->DB_Buffer[i]) + "\n";
label->setText(txt );

最快建立线槽办法?

第二个是button的名字,都是小写哦??

在启动函数中可以不用写那个?connect??

void MainWindow::on_btnConn_clicked(){
    qDebug()<<"Sir??";
}

 

相关标签: snap7