最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

关于ST语言的一些问题

[复制链接]
查看1999 | 回复9 | 2023-3-21 04:58:06 来自手机 | 显示全部楼层 |阅读模式
请帮忙写一个电机控制的功能块。
1、要求有远程反馈,运行反馈,故障反馈,手动自动切换模式。
2、当远程反馈为假时手动模式和自动模式失效。
3、当故障反馈为真时,电机停止运行。
4、当处于自动模式是手动模式失效,反之亦然。
5、记录电机运行时间,以小时为单位。
回复

使用道具 举报

chatGPT_小控 | 2023-3-21 04:58:42 | 显示全部楼层
以下是一个基础的电机控制的ST功能块代码,根据实际需要进行修改和增加:

```
FUNCTION_BLOCK Motor_Control
VAR_INPUT
    Remote_Feedback : BOOL; (*远程反馈*)
    Manual_Auto_Mode_Select : BOOL; (*手动自动模式选择开关*)
END_VAR
VAR_OUTPUT
    Run_Feedback : BOOL; (*运行反馈*)
    Fault_Feedback : BOOL; (*故障反馈*)
    Motor_Run : BOOL; (*电机运行开关*)
END_VAR
VAR
    Automatic_Mode : BOOL := TRUE; (*自动模式标志*)
    Manual_Mode_Timer : TON; (*手动模式计时器*)
    Motor_Runtime : UDINT; (*电机运行时间计时器*)
END_VAR
(*当远程反馈为假或故障反馈为真时,电机停止运行*)
IF NOT Remote_Feedback OR Fault_Feedback THEN
    Motor_Run := FALSE; (*电机停止运行*)
    Automatic_Mode := TRUE; (*自动模式标志复位*)
    Manual_Mode_Timer(IN:=FALSE); (*手动模式计时器复位*)
    Motor_Runtime := 0; (*电机运行时间清零*)
ELSIF Manual_Auto_Mode_Select THEN (*手动模式*)
    Automatic_Mode := FALSE; (*自动模式标志复位*)
    Manual_Mode_Timer(IN:=TRUE); (*手动模式计时器开始计时*)
    IF Manual_Mode_Timer.Q THEN (*手动模式计时结束*)
        Manual_Mode_Timer(IN:=FALSE); (*手动模式计时器复位*)
        Motor_Run := FALSE; (*电机停止运行*)
        Automatic_Mode := TRUE; (*自动模式标志复位*)
        Motor_Runtime := 0; (*电机运行时间清零*)
    ELSE
        Motor_Run := TRUE; (*电机运行*)
        Motor_Runtime := Motor_Runtime + 1; (*电机运行时间累加*)
    END_IF
ELSE (*自动模式*)
    Automatic_Mode := TRUE; (*自动模式标志复位*)
    Manual_Mode_Timer(IN:=FALSE); (*手动模式计时器复位*)
    IF Motor_Run THEN
        Motor_Runtime := Motor_Runtime + 1; (*电机运行时间累加*)
    END_IF
    Motor_Run := Run_Logic(); (*根据实际需求编写电机启停逻辑*)
END_IF
Run_Feedback := Motor_Run; (*输出运行反馈*)
Fault_Feedback := NOT Motor_Run; (*输出故障反馈*)

(*电机启停逻辑函数*)
FUNCTION Run_Logic : BOOL
VAR
    Run_Flag : BOOL;
BEGIN
    (*根据实际需求编写电机启停逻辑*)
    Run_Flag := FALSE; (*示例:若远程反馈为真且电机运行时间小于10小时,则电机运行;否则停止运行*)
    IF Remote_Feedback AND (Motor_Runtime < 10*3600) THEN
        Run_Flag := TRUE;
    END_IF
    RETURN Run_Flag;
END_FUNCTION
```

需要注意的是,此功能块中的电机启停逻辑函数 `Run_Logic()` 需要根据实际需求编写。同时需要在程序中初始化 `Manual_Mode_Timer` 和 `Motor_Runtime` 变量,并设定计时器预设值和计时器周期。
回复

使用道具 举报

ysk001 | 2023-3-21 13:30:13 | 显示全部楼层
可以写python程序吗
回复

使用道具 举报

chatGPT_小控 | 2023-3-21 13:30:52 | 显示全部楼层
当然可以,以下是相应的电机控制的Python代码,同样需要根据实际需求进行修改和增加:```class Motor_Control:    def __init__(self):        self.Remote_Feedback = False        self.Manual_Auto_Mode_Select = False        self.Run_Feedback = False        self.Fault_Feedback = False        self.Motor_Run = False        self.Automatic_Mode = True        self.Manual_Mode_Timer = 0        self.Motor_Runtime = 0    def Run_Logic(self):        # 根据实际需求编写电机启停逻辑        # 示例:若远程反馈为真且电机运行时间小于10小时,则电机运行;否则停止运行        if self.Remote_Feedback and (self.Motor_Runtime < 10*3600):            return True        else:            return False    def Motor_Control(self, Remote_Feedback, Manual_Auto_Mode_Select):        self.Remote_Feedback = Remote_Feedback        self.Manual_Auto_Mode_Select = Manual_Auto_Mode_Select        # 当远程反馈为假或故障反馈为真时,电机停止运行        if not self.Remote_Feedback or self.Fault_Feedback:            self.Motor_Run = False            self.Automatic_Mode = True            self.Manual_Mode_Timer = 0            self.Motor_Runtime = 0        elif self.Manual_Auto_Mode_Select: # 手动模式            self.Automatic_Mode = False            self.Manual_Mode_Timer += 1            if self.Manual_Mode_Timer >= 10: # 手动模式计时结束                self.Motor_Run = False # 电机停止运行                self.Automatic_Mode = True # 自动模式标志复位                self.Manual_Mode_Timer = 0 # 手动模式计时器复位                self.Motor_Runtime = 0 # 电机运行时间清零            else:                self.Motor_Run = True # 电机运行        else: # 自动模式            self.Automatic_Mode = True # 自动模式标志复位            self.Manual_Mode_Timer = 0 # 手动模式计时器复位            if self.Motor_Run:                self.Motor_Runtime += 1 # 电机运行时间累加            self.Motor_Run = self.Run_Logic() # 根据实际需求编写电机启停逻辑函数        self.Run_Feedback = self.Motor_Run # 输出运行反馈        self.Fault_Feedback = not self.Motor_Run # 输出故障反馈```需要注意的是,此代码中的电机启停逻辑 `Run_Logic()` 函数需要根据实际需求编写。同时需要在程序中初始化 `Manual_Mode_Timer` 和 `Motor_Runtime` 变量,并设定计时器周期。
回复

使用道具 举报

ysk001 | 2023-3-21 13:33:34 | 显示全部楼层
能不我用python写一个ui界面吗?
1、需要一个按钮,一个文本框,一个列表框。
2、当按钮按下时,根据文本框里输入的网址,提取对应网站里面的小说名称、下载地址,返回到列表框里。
回复

使用道具 举报

chatGPT_小控 | 2023-3-21 13:34:11 | 显示全部楼层
当然可以,以下是一个简单的Python GUI程序,使用了PyQt库来实现:```import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QTextBrowserfrom bs4 import BeautifulSoupimport requestsclass NovelDownloader(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.resize(500, 500)        self.setWindowTitle(\'小说下载器\')        self.label = QLabel(\'请输入小说主页链接:\', self)        self.label.move(20, 20)        self.edit = QLineEdit(self)        self.edit.setGeometry(20, 50, 200, 25)        self.btn = QPushButton(\'搜索\', self)        self.btn.setGeometry(240, 50, 80, 25)        self.btn.clicked.connect(self.search_novel)        self.list = QTextBrowser(self)        self.list.setGeometry(20, 90, 460, 380)    def search_novel(self):        url = self.edit.text()        headers = {            \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3\'}        res = requests.get(url, headers=headers)        soup = BeautifulSoup(res.content, \'html.parser\')        novel_list = soup.find_all(\'div\', {\'class\': \'novelslist\'})        novels = []        for novel in novel_list:            title = novel.find(\'li\').text            download_url = novel.find(\'a\')[\'href\']            novels.append((title, download_url))        self.list.clear()        for novel in novels:            self.list.append(novel[0] + \': \' + novel[1])if __name__ == \'__main__\':    app = QApplication(sys.argv)    nd = NovelDownloader()    nd.show()    sys.exit(app.exec_())```在上述代码中,我们先定义了一个NovelDownloader类继承自QWidget,然后在类的构造函数中初始化UI。在UI中,我们添加了一个QLabel作为提示文字,一个QLineEdit作为输入框,一个QPushButton作为按钮,一个QTextBrowser作为列表框。其中,我们通过btn.clicked.connect(self.search_novel)将search_novel函数与按钮的点击事件关联在一起。search_novel函数中,我们使用requests库发送HTTP请求获取网页内容,然后使用BeautifulSoup库解析网页,提取小说名称和下载地址,并将结果显示在列表框中。最后,我们通过if __name__ == \'__main__\'创建一个应用程序对象并运行。
回复

使用道具 举报

ysk001 | 2023-3-21 14:07:04 | 显示全部楼层
帮我写一个西门子wincc vbs脚本,要求如下;
1、在按钮组态事件中,鼠标动作触发。
2、读取二进制变量“DI01”。
3、当按钮有动作时,变量"DI01"为1。
4、当按钮再次有动作时,变量"DI01"为0。
回复

使用道具 举报

chatGPT_小控 | 2023-3-21 14:07:17 | 显示全部楼层
以下是根据要求编写的VBScript脚本代码:```Sub Button_Clickevent()    Dim DI01    DI01 = TagRead(\"DI01\")    If DI01 = 1 Then        TagWrite \"DI01\", 0    Else        TagWrite \"DI01\", 1    End IfEnd Sub```这个脚本将在WinCC的按钮组态事件中被触发,读取“DI01”的值并根据按钮动作设置它的值。如果“DI01”的值为1,则将其设置为0,反之亦然。
回复

使用道具 举报

ysk001 | 2023-3-21 14:15:39 | 显示全部楼层
帮我写一个西门子wincc vbs脚本,要求如下;
1、在按钮组态事件中,鼠标动作触发。
2、读取二进制内部变量“DI01”。
3、当按钮有动作时,变量"DI01"为1。
4、当按钮再次有动作时,变量"DI01"为0。
5、wincc是7.4版本的。
回复

使用道具 举报

chatGPT_小控 | 2023-3-21 14:15:48 | 显示全部楼层
以下是可以在WinCC 7.4版本中使用的VBScript脚本代码:```Sub Button_Clickevent()    Dim DI01    DI01 = Application.ReadVariable(\"DI01\")    If DI01 = 1 Then        Application.WriteVariable \"DI01\", 0    Else        Application.WriteVariable \"DI01\", 1    End IfEnd Sub```注意,WinCC 7.4版本中的内部变量需要使用`Application.ReadVariable`和`Application.WriteVariable`函数来读取和写入。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则