登录
首页 PLC论坛 三菱Mitsubishi
回帖 发帖
正文

主题:三菱ST 双字乘法

点击:1292 回复:10

三菱梯形图可以实现双字乘法如:D* D10 D14 D100
但是这个双字乘法怎么用ST语言实现?
我定义了三个标签,都是同类型的,图片中的D14和D10是读取的时钟寄存器然后通过字变双字函数转了下,编译却报错!
附件 42cd1036c55c07061f5d7eb69baf606.jpg
附件 7e277e41b774e202277d9a4d716fa81.jpg
附件 ebbf965a16c79bb6c9f24591329cbf4.jpg
22-10-12 16:29
直接就Double Word[Signed]
就行
22-10-12 16:51
这样也试过,直接报中间值1,2的类型不一致,因为它默认D14,D10是单字,所以我才想用单字变双字的函数。我去看了手册D*这个指令只支持结构体不支持ST,不知道怎样才能实现双字乘法。
22-10-13 08:20

引用 Abstinence 在 2022/10/12 16:29:10 发言【内容省略】

双字乘法的结果为64位数据,即2个双字,因为大部分三菱型号不支持64位数据结构,你只能声明一个包含2个双字的数组来实现.
附件 workpicture1.jpg
Good Luck~
22-10-13 09:04
我把输出值定义成双字数组包含两个元素数,还是报错*的类型不一致,两个乘数都转成双字了。
附件 0169c60b50fbc20da467868f35c9585.jpg
附件 8cdfb63668f047edc474fb59d969ba0.jpg
22-10-13 10:29

引用 Abstinence 在 2022/10/13 10:29:41 发言【内容省略】

Sir,Word/DoubleWord类型称作为位串类型,其一般不参与四则运算,而是进行逻辑运算。
而您是不是该仔细审核您的程序,您乘数使用的数据类型是Word/DWord[Unsigned],而存储结果的数据类型却是Word/Dword[Signed]。
Good Luck~
22-10-13 10:58
你好。存储结果我试了同样的DOUBLE WORD(UNSIGNED)还是报*的类型不一致。现在都懵了,梯形图简单的D*,用ST语言却不支持。该怎样实现这个功能呢?
我的想法是读出的时钟数据存储在D10,然后让年和分相乘做一个随机密码。乘出来的结果必须要双字,不然不对。
22-10-14 08:22

引用 Abstinence 在 2022/10/14 8:22:56 发言【内容省略】

我无法理解为啥这种需求却要D*,分数据范围是0~59,年的取值范围是0~99,即使59*99也就是5841,一个32位数据完全可以存放了,也就是说*就可以做到了。
附件 workpicture1.jpg
附件 workpicture2.jpg
附件 workpicture3.jpg
Good Luck~
22-10-14 09:46
你好,我也是刚自学ST,我选的Q系列的,然后年是四位数(2022),年*分最大在59*2022=119298,。
然后我也将年和分的D地址用函数转换成双字了,最后乘的时候就报类型不一致,实在不知道哪里设错了。
附件 c7b7c9173b6a0d48830fb1e258d26dd.jpg
22-10-14 10:33

引用 Abstinence 在 2022/10/14 10:33:22 发言【内容省略】

Q系列和FX系列使用上没有区别,除了日期读取指令不同之外。
附件 workpicture1.jpg
Word[Signed]相乘的结果DoubleWord[Signed],DoubleWord[Signed]相乘的结果为一个具有2个元素的DoubleWord数组。
Good Luck~
22-10-14 10:55

上一页下一页

工控新闻

更多新闻资讯