2021-05-17Snap7与西门子PLC读取
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??";
}
上一篇: 第一天的学习
下一篇: 大数据基础 servlet 第一天