您现在所在的是:

PLC论坛

回帖:5个,阅读:707 [上一页] [1] [下一页]
22552
liuxd6909
文章数:11950
年度积分:120
历史总积分:22552
注册时间:2008/7/19
发站内信
2017国庆活动(三)
2015Indusoft体验
LOGO!体验一等奖
发表于:2018/10/18 7:01:08
#0楼
fblock DI111;
attribute(autoscan);
uuid{0e35-8894-0dca-dbd7};
var
ADDR : word;in;
S1 : bool;in;
S2 : bool;in;
S3 : bool;in;
S4 : bool;in;
S5 : bool;in;
S6 : bool;in;
S7 : bool;in;
S8 : bool;in;
S9 : bool;in;
S10 : bool;in;
S11 : bool;in;
S12 : bool;in;
S13 : bool;in;
S14 : bool;in;
S15 : bool;in;
S16 : bool;in;
Disable: bool;in;
Sel_CH : word;in;

VF  : word;out;
I1 : bool;out;
I2 : bool;out;
I3 : bool;out;
I4 : bool;out;
I5 : bool;out;
I6 : bool;out;
I7 : bool;out;
I8 : bool;out;
I9 : bool;out;
I10 : bool;out;
I11 : bool;out;
I12 : bool;out;
I13 : bool;out;
I14 : bool;out;
I15 : bool;out;
I16 : bool;out;
implementation


void main()
{
int * pVal;
pVal = (int*)io_mem(ADDR);
if(!pVal){
VF=0;
}else{

#define _(n) I##n = *pVal & (0x1 << (n-1))?1:0;


if(Disable == 1){

if(Sel_CH & 0x0001){
I1 = S1;
}else{
      _(1);
      }
if(Sel_CH & 0x0002){
I2 = S2;
}else{
      _(2);
      }
if(Sel_CH & 0x0004){
I3 = S3;
}else{
      _(3);
      }
if(Sel_CH & 0x0008){
I4 = S4;
}else{
      _(4);
      }
if(Sel_CH & 0x0010){
I5 = S5;
}else{
      _(5);
      }
if(Sel_CH & 0x0020){
I6 = S6;
}else{
      _(6);
      }
if(Sel_CH & 0x0040){
I7 = S7;
}else{
      _(7);
      }
if(Sel_CH & 0x0080){
I8 = S8;
}else{
      _(8);
      }
      if(Sel_CH & 0x0100){
I9 = S9;
}else{
      _(9);
      }
      if(Sel_CH & 0x0200){
I10 = S10;
}else{
      _(10);
      }
      if(Sel_CH & 0x0400){
I11 = S11;
}else{
      _(11);
      }
      if(Sel_CH & 0x0800){
I12 = S12;
}else{
      _(12);
      }
      if(Sel_CH & 0x1000){
I13 = S13;
}else{
      _(13);
      }
      if(Sel_CH & 0x2000){
I14 = S14;
}else{
      _(14);
      }
      if(Sel_CH & 0x4000){
I15 = S15;
}else{
      _(15);
      }
      if(Sel_CH & 0x8000){
I16 = S16;
}else{
      _(16);
      }
VF=Sel_CH;
}else{
_(1);
_(2);
_(3);
_(4);
_(5);
_(6);
_(7);
_(8);
_(9);
_(10);
_(11);
_(12);
_(13);
_(14);
_(15);
_(16);
VF=0xffff;}
}}
附件 微信截图_20181018070013.jpg



10分悬赏
6690
1372216725
文章数:238
年度积分:62
历史总积分:6690
注册时间:2016/1/23
发站内信
发表于:2018/10/18 17:37:11
#1楼
这程序大慨的意思应该是  当addr为正数是  且disable为1时 输入输出 s/l有效  s和l为一一对应关系    具体那些输入输出有效   根据sel_ch的值来决定  如sel_ch为65535就是把s1-s16的当前值赋值给I1-I16  就瞎翻译的表情看看就好  有错误的地方还请大神们指正
此帖发自论坛手机版
22552
liuxd6909
文章数:11950
年度积分:120
历史总积分:22552
注册时间:2008/7/19
发站内信
2017国庆活动(三)
2015Indusoft体验
LOGO!体验一等奖
发表于:2018/10/18 18:43:59
#2楼
1、下面这段程序 咋理解 关键是 。
void main()
{
int * pVal;
pVal = (int*)io_mem(ADDR);
if(!pVal){
VF=0;
}else{

#define _(n) I##n = *pVal & (0x1 << (n-1))?1:0;
2、还有下面这段程序中else后面的语句咋 理解 。
if(Sel_CH & 0x4000){
I15 = S15;
}else{
     _(15);
     }
21756
bnnyygy
文章数:6210
年度积分:652
历史总积分:21756
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2018/10/18 20:20:32
#3楼
这是啥PLC啊,
21756
bnnyygy
文章数:6210
年度积分:652
历史总积分:21756
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2018/10/18 20:27:59
#4楼
以下是引用liuxd69092018/10/18 18:43:59的发言:
1、下面这段程序 咋理解 关键是 。
void main()
{
int * pVal;
pVal = (int*)io_mem(ADDR);
if(!pVal){
VF=0;
}else{

#define _(n) I##n = *pVal & (0x1 << (n-1))?1:0;
2、还有下面这段程序中else后面的语句咋 理解 。
if(Sel_CH & 0x4000){
I15 = S15;
}else{
     _(15);
     }


我觉得找PLC编程手册应该看看就知道了。
6690
1372216725
文章数:238
年度积分:62
历史总积分:6690
注册时间:2016/1/23
发站内信
发表于:2018/10/18 21:09:51
#5楼
1void  main  表示主程序
int*pval表示指针
在下一句应该是  pval指向ADDR
在下一句if先对pval做个非运算 如果最终结果为真  就把0赋值给VF  如果为假就执行else以后的语句  在下一句#define宏定意  就是_(n)就代表了后面那一长串  后面那一长穿是三目运算  具体作用没太看明白  
2  就是把sel_ch 与0x4000转换成二进制做个与运算  结果为真就把s15的当前值赋值给l15结果为假就执行else以后的语句  后面那个_(15)没太看明白作用  应该和上面宏定义有关
此帖发自论坛手机版

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

62.4004