Spa*_*ent 1 structured-text twincat
整个 PLC 的初学者,所以欢迎更正。
我正在尝试整理我的项目,当前情况是这样的:我从 modbus 收到 16 字节数组。这些充当按钮、灯、传送带,这些是您在 Factory IO 中所拥有的。
GAB_FactoryIO_Inputs AT %I* : ARRAY [0..15] OF BYTE;
GAB_FactoryIO_Outputs AT %Q* : ARRAY [0..15] OF BYTE;
Run Code Online (Sandbox Code Playgroud)
因此,我没有用它的位“IO.GAB_FactoryIO_Inputs[0].0”来指代“开始按钮”,而是做了一个笨拙的转换 POU 和 GVL 来遍历每一位并给它们一个新名称。所以它目前看起来像这样的 200 行:
IO.iSensor10_Capa := IO.GAB_FactoryIO_Inputs[7].3;
IO.iSensor9_Capa := IO.GAB_FactoryIO_Inputs[7].4;
IO.iPositioner_Limit := IO.GAB_FactoryIO_Inputs[7].5;
IO.iPositioner_Clamped := IO.GAB_FactoryIO_Inputs[7].6;
IO.iPick2_Detected := IO.GAB_FactoryIO_Inputs[7].7;
IO.iPick2_MovX := IO.GAB_FactoryIO_Inputs[8].0;
IO.iPick2_MovZ := IO.GAB_FactoryIO_Inputs[8].1;
IO.iPick2_Rot := IO.GAB_FactoryIO_Inputs[8].2;
IO.iPick2_GripRot := IO.GAB_FactoryIO_Inputs[8].3;
Run Code Online (Sandbox Code Playgroud)
和这个
iPositioner_Limit : BOOL;
iPositioner_Clamped : BOOL;
iPick2_Detected : BOOL;
iPick2_MovX : BOOL;
iPick2_MovZ : BOOL;
iPick2_Rot : BOOL;
iPick2_GripRot : BOOL;
Run Code Online (Sandbox Code Playgroud)
这一切都按其应有的方式工作,但我不禁感到它的业余,笨拙并且减慢了速度。
我读过有关结构、枚举和别名的内容,并认为通过将它们轻松地安排在“机柜”中,结构将成为我的救星,如下所示:
stCNC.Button1
stCNC.Button3
stCNC.Sensor1
Run Code Online (Sandbox Code Playgroud)
隐藏在结构内部的是 stCNC Sensor1 = IO.GAB_FactoryIO_Inputs[9].4; 之间的转换;
但由于某种原因,这根本不起作用。我很可能会以完全错误的角度进行操作,但不知道接下来要寻找什么。
编辑工作正在进行中。似乎我掌握了基础知识。@kolyur 有足够简单的例子可以遵循,所以我从那里开始,并朝着@Steve 和@YAVA 的例子前进:
//sending inputs to GVL FactoryIO_Inputs AT %I* : ARRAY [0..15] OF BYTE;
fbMBReadInputs(pDestAddr := ADR(IO.FactoryIO_Inputs),
//in GVL IO
FactoryIO_Inputs AT %I* : U_UNION2;
//inside S_LIGHTS:
TYPE S_LIGHTS :
STRUCT
LIGHT0 : BIT;
LIGHT1 : BIT;
LIGHT2 : BIT;
LIGHT3 : BIT;
LIGHT4 : BIT;
LIGHT5 : BIT;
LIGHT6 : BIT;
LIGHT7 : BIT;
END_STRUCT
END_TYPE
//inside U_UNION1
TYPE U_UNION1 :
UNION
nArray : ARRAY[0..15] OF BYTE;
sName : S_NAME;
//Then instantiating in POU
VAR
sLights : S_LIGHTS;
---
sLights.LIGHT1 := TRUE;
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用 UNION。它基本上是一个“叠加”变量,您可以将其放置在另一个变量上。
TYPE Test :
UNION
nARRAY : ARRAY[0..15] OF BYTE;
sHumanReadable : sStruct;
END_UNION
END_TYPE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |