bigluo
级别: 家园常客
精华主题: 0
发帖数量: 387 个
工控威望: 912 点
下载积分: 2724 分
在线时间: 73(小时)
注册时间: 2007-12-14
最后登录: 2021-05-15
查看bigluo的 主题 / 回贴
楼主  发表于: 2008-05-30 10:25
最近准备用MT500连接松下的PLC,出于成本考虑,PLC没有时钟模块,由触摸屏在上电时将时钟写入到PLC的寄存器。
触摸屏的时钟格式是BCD码,而松下的时钟贮存格式是二进制,而且是一个字里面贮存年/月两个内容,这样就要使用二进制转换。
我的宏指令是这样的:

Macro_Command main()
  short iYear, iMonth, iDay, iHour, iMinute, iSecond
  short iTemp
  //取得年月日
  GetData(iYear, RW_Bcdplc, 60005, 1)
  GetData(iMonth, RW_Bcdplc, 60004, 1)
  GetData(iDay, RW_Bcdplc, 60003, 1)
  GetData(iHour ,RW_Bcdplc ,60002,1)
  GetData(iMinute ,RW_Bcdplc ,60001,1)
  GetData(iSecond ,RW_Bcdplc ,60000,1)
  iTemp = 0xFF And iYear 
  SetData(iTemp ,RW_Binplc ,0,1) 
End Macro_Command

在iTemp = 0xF and iYear这一行,本来是想得到数字8的,没想到结果竟是1!
想来想去,这是不是因为宏解释器把AND作为了布尔运算符了?
这该怎样解决呢?
谢谢了!
bigluo
级别: 家园常客
精华主题: 0
发帖数量: 387 个
工控威望: 912 点
下载积分: 2724 分
在线时间: 73(小时)
注册时间: 2007-12-14
最后登录: 2021-05-15
查看bigluo的 主题 / 回贴
1楼  发表于: 2008-05-30 11:07
找到原因了。
原来二进制运算的“与”是用"&"作为标识符的。
yinjiantc
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看yinjiantc的 主题 / 回贴
2楼  发表于: 2008-08-28 10:23
记号,以后用的着
天外飞仙
级别: 工控侠客
精华主题: 2 篇
发帖数量: 337 个
工控威望: 3091 点
下载积分: 1984 分
在线时间: 13(小时)
注册时间: 2007-08-19
最后登录: 2024-06-26
查看天外飞仙的 主题 / 回贴
3楼  发表于: 2008-08-29 22:00
不要这么复杂,触摸屏有个传输功能的,只要把这个时间地址传送到寄存器就行了。不要用到宏指令功能的。
本公司专业销售WEINVIEW、信捷触摸屏,信捷PLC,三晶变频器,东元伺服,日本高士美换模系统。承接各项自动化流水工程制造与设计以及设备改造  www.czzlzdh.com
mingchli
级别: 略有小成
精华主题: 0
发帖数量: 307 个
工控威望: 315 点
下载积分: 1608 分
在线时间: 128(小时)
注册时间: 2008-06-25
最后登录: 2024-03-20
查看mingchli的 主题 / 回贴
4楼  发表于: 2008-08-31 20:49
活到老学到老。