C#对S5Time数据格式的转换

本文介绍了如何在C#中实现S5Time数据格式的转换,包括将S5Time转换为整数以及将整数转换回S5Time的过程。S5Time是一种用于西门子PLC定时器的数据格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近做的一个项目,其中需要对西门子PLC中定时器的间隔时间进行设置,数据格式为S5Time。

  S5Time数据长度为两个字节,转成16进制数后,第一位表示时间基准,第二至四位是用BCD码表示的时间值。时间基准的二进制代码如下:

        10ms    00

        100ms    01

        1s      10

        10s      11

  举个例子,时间间隔值为5s时,转成16进制的S5Time数就是0x0500,也可以是0x2005等,在PLC中CPU会自动选择较小的时间基准来对数值进行表示,所以从PLC中读到的以上数值应该是0x0500。通过OPC读取到的为十进制表示的整数值,因此用C#读取和设置的时候都必须先进行转换。

  知道原理,转换就很容易了,代码如下:

S5Time格式转换
private int ConvertS5TimeToInt32(int init)
{
int qianwei, baiwei, shiwei, gewei;
int beishu = 0;
int result = 0;
qianwei
= init / 4096;
init
= init % 4096;
baiwei
= init / 256;
init
= init % 256;
shiwei
= init / 16;
gewei
= init % 16;
switch (qianwei)
{
case 0:
beishu
= 10;
break;
case 1:
beishu
= 100;
break;
case 2:
beishu
= 1000;
break;
case 3:
beishu
= 10000;
break;
}
result
= (baiwei * 100 + shiwei * 10 + gewei) * beishu;

return result;
}

private int ConvertInt32ToS5Time(int init)
{
int qianwei, baiwei, shiwei, gewei;
int result = 0;
if (0 <= init && init <= 4095)
{
init
= init / 10;
qianwei
= 0;
baiwei
= init / 100;
init
= init % 100;
shiwei
= init / 10;
gewei
= init % 10;
result
= qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
else if (0 <= init / 10 && init / 10 <= 4095)
{
init
= init / 100;
qianwei
= 1;
baiwei
= init / 100;
init
= init % 100;
shiwei
= init / 10;
gewei
= init % 10;
result
= qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
else if (0 <= init / 100 && init / 100 <= 4095)
{
init
= init / 1000;
qianwei
= 2;
baiwei
= init / 100;
init
= init % 100;
shiwei
= init / 10;
gewei
= init % 10;
result
= qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
else if (0 <= init / 1000 && init / 1000 <= 4095)
{
init
= init / 10000;
qianwei
= 3;
baiwei
= init / 100;
init
= init % 100;
shiwei
= init / 10;
gewei
= init % 10;
result
= qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}

return result;
}

 

转载于:https://www.cnblogs.com/cnshaka/archive/2010/11/14/1877045.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值