您现在所在的是:

三菱Mitsubishi

回帖:10个,阅读:1152 [上一页] [1] [2] [下一页]
* 帖子主题:

三菱ST 双字乘法

65
Abstinence
文章数:21
年度积分:65
历史总积分:65
注册时间:2022/8/13
发站内信
发表于:2022/10/12 16:29:10
#0楼
三菱梯形图可以实现双字乘法如:D* D10 D14 D100
但是这个双字乘法怎么用ST语言实现?
我定义了三个标签,都是同类型的,图片中的D14和D10是读取的时钟寄存器然后通过字变双字函数转了下,编译却报错!
附件 42cd1036c55c07061f5d7eb69baf606.jpg

附件 7e277e41b774e202277d9a4d716fa81.jpg

附件 ebbf965a16c79bb6c9f24591329cbf4.jpg



50
Pe4ch
文章数:7
年度积分:50
历史总积分:50
注册时间:2022/7/15
发站内信
发表于:2022/10/12 16:51:49
#1楼
直接就Double Word[Signed]
就行
65
Abstinence
文章数:21
年度积分:65
历史总积分:65
注册时间:2022/8/13
发站内信
发表于:2022/10/13 8:20:10
#2楼
回复 #1楼 Pe4ch
这样也试过,直接报中间值1,2的类型不一致,因为它默认D14,D10是单字,所以我才想用单字变双字的函数。我去看了手册D*这个指令只支持结构体不支持ST,不知道怎样才能实现双字乘法。
37231
cvlsam 版主
文章数:12401
年度积分:1583
历史总积分:37231
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2022/10/13 9:04:41
#3楼
以下是引用Abstinence2022/10/12 16:29:10的发言:
三菱梯形图可以实现双字乘法如:D* D10 D14 D100
但是这个双字乘法怎么用ST语言实现?
我定义了三个标签,都是同类型的,图片中的D14和D10是读取的时钟寄存器然后通过字变双字函数转了下,编译却报错!
附件 42cd1036c55c07061f5d7eb69baf606.jpg

附件 7e277e41b774e202277d9a4d716fa81.jpg

附件 ebbf965a16c79bb6c9f24591329cbf4.jpg




双字乘法的结果为64位数据,即2个双字,因为大部分三菱型号不支持64位数据结构,你只能声明一个包含2个双字的数组来实现.

附件 workpicture1.jpg

Good Luck~
65
Abstinence
文章数:21
年度积分:65
历史总积分:65
注册时间:2022/8/13
发站内信
发表于:2022/10/13 10:29:41
#4楼
回复 #3楼 cvlsam
我把输出值定义成双字数组包含两个元素数,还是报错*的类型不一致,两个乘数都转成双字了。
附件 0169c60b50fbc20da467868f35c9585.jpg

附件 8cdfb63668f047edc474fb59d969ba0.jpg
37231
cvlsam 版主
文章数:12401
年度积分:1583
历史总积分:37231
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2022/10/13 10:58:12
#5楼
以下是引用Abstinence2022/10/13 10:29:41的发言:
我把输出值定义成双字数组包含两个元素数,还是报错*的类型不一致,两个乘数都转成双字了。
附件 0169c60b50fbc20da467868f35c9585.jpg

附件 8cdfb63668f047edc474fb59d969ba0.jpg

Sir,Word/DoubleWord类型称作为位串类型,其一般不参与四则运算,而是进行逻辑运算。

而您是不是该仔细审核您的程序,您乘数使用的数据类型是Word/DWord[Unsigned],而存储结果的数据类型却是Word/Dword[Signed]。

Good Luck~
65
Abstinence
文章数:21
年度积分:65
历史总积分:65
注册时间:2022/8/13
发站内信
发表于:2022/10/14 8:22:56
#6楼
回复 #5楼 cvlsam
你好。存储结果我试了同样的DOUBLE WORD(UNSIGNED)还是报*的类型不一致。现在都懵了,梯形图简单的D*,用ST语言却不支持。该怎样实现这个功能呢?
我的想法是读出的时钟数据存储在D10,然后让年和分相乘做一个随机密码。乘出来的结果必须要双字,不然不对。
37231
cvlsam 版主
文章数:12401
年度积分:1583
历史总积分:37231
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2022/10/14 9:46:04
#7楼
以下是引用Abstinence2022/10/14 8:22:56的发言:
你好。存储结果我试了同样的DOUBLE WORD(UNSIGNED)还是报*的类型不一致。现在都懵了,梯形图简单的D*,用ST语言却不支持。该怎样实现这个功能呢?
我的想法是读出的时钟数据存储在D10,然后让年和分相乘做一个随机密码。乘出来的结果必须要双字,不然不对。

我无法理解为啥这种需求却要D*,分数据范围是0~59,年的取值范围是0~99,即使59*99也就是5841,一个32位数据完全可以存放了,也就是说*就可以做到了。

附件 workpicture1.jpg

附件 workpicture2.jpg

附件 workpicture3.jpg

Good Luck~
65
Abstinence
文章数:21
年度积分:65
历史总积分:65
注册时间:2022/8/13
发站内信
发表于:2022/10/14 10:33:22
#8楼
回复 #7楼 cvlsam
你好,我也是刚自学ST,我选的Q系列的,然后年是四位数(2022),年*分最大在59*2022=119298,。
然后我也将年和分的D地址用函数转换成双字了,最后乘的时候就报类型不一致,实在不知道哪里设错了。
附件 c7b7c9173b6a0d48830fb1e258d26dd.jpg
37231
cvlsam 版主
文章数:12401
年度积分:1583
历史总积分:37231
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2022/10/14 10:55:23
#9楼
以下是引用Abstinence2022/10/14 10:33:22的发言:
你好,我也是刚自学ST,我选的Q系列的,然后年是四位数(2022),年*分最大在59*2022=119298,。
然后我也将年和分的D地址用函数转换成双字了,最后乘的时候就报类型不一致,实在不知道哪里设错了。
附件 c7b7c9173b6a0d48830fb1e258d26dd.jpg

Q系列和FX系列使用上没有区别,除了日期读取指令不同之外。
附件 workpicture1.jpg

Word[Signed]相乘的结果DoubleWord[Signed],DoubleWord[Signed]相乘的结果为一个具有2个元素的DoubleWord数组。

Good Luck~

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

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

78.0005